使用Linq迭代更改列表

时间:2013-07-03 18:38:25

标签: linq primes

我正在尝试使用Sieve of Eratosthenes在列表中查找素数。我试过这个:

var primeNumber = new List<int>(Enumerable.Range(2, max - 1));
primeNumber.ForEach(m => primeNumber.RemoveAll(n => n % m == 0));

但由于您无法迭代正在更改的列表,因此无效。 有没有比创建另一个数组和迭代它更好的方法,因为我只需要通过素数迭代?使用第二个数组,我将删除可以除以2的所有内容,然后删除可以除以4的所有内容(应该没有)等等。

2 个答案:

答案 0 :(得分:0)

您应该只是将数字复制到新数组并对其执行ForEach。我不认为有更好的方法。

答案 1 :(得分:0)

我选择这样做:

double maxFactor = Math.Sqrt(primeNumber.Max());
while (factor <= maxFactor) 
{ 
    factor = primeNumber.First(n => n > factor);
    primeNumber.RemoveAll(n => n != factor && n % factor == 0);
}

它正在工作,但仍然非常快速和干净。