我正在尝试使用Sieve of Eratosthenes在列表中查找素数。我试过这个:
var primeNumber = new List<int>(Enumerable.Range(2, max - 1));
primeNumber.ForEach(m => primeNumber.RemoveAll(n => n % m == 0));
但由于您无法迭代正在更改的列表,因此无效。 有没有比创建另一个数组和迭代它更好的方法,因为我只需要通过素数迭代?使用第二个数组,我将删除可以除以2的所有内容,然后删除可以除以4的所有内容(应该没有)等等。
答案 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);
}
它正在工作,但仍然非常快速和干净。