0

我正在尝试使用Eratosthenes 的筛子在列表中找到素数。我试过这个:

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

但它不起作用,因为您无法迭代正在更改的列表。有没有比创建另一个数组并遍历它更好的方法,因为我只需要遍历质数?对于第二个数组,我将删除所有可以被 2 整除的东西,然后删除所有可以被 4 整除的东西(应该没有),依此类推。

4

2 回答 2

0

您可能应该只是将数字复制到一个新数组并执行此ForEach操作。我不认为有更好的方法。

于 2013-07-03T18:46:44.540 回答
0

我选择这样做:

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

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

于 2013-07-04T13:03:37.853 回答