Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Linq迭代不断变化的列表_Linq_Primes - Fatal编程技术网

使用Linq迭代不断变化的列表

使用Linq迭代不断变化的列表,linq,primes,Linq,Primes,我正试图在列表中使用。我试过这个: var primeNumber = new List<int>(Enumerable.Range(2, max - 1)); primeNumber.ForEach(m => primeNumber.RemoveAll(n => n % m == 0)); var primeNumber=新列表(可枚举范围(2,最大值-1)); primeNumber.ForEach(m=>primeNumber.RemoveAll(n=>n%m==

我正试图在列表中使用。我试过这个:

var primeNumber = new List<int>(Enumerable.Range(2, max - 1));
primeNumber.ForEach(m => primeNumber.RemoveAll(n => n % m == 0));
var primeNumber=新列表(可枚举范围(2,最大值-1));
primeNumber.ForEach(m=>primeNumber.RemoveAll(n=>n%m==0));
但它不起作用,因为您无法迭代正在更改的列表。
有没有比创建另一个数组并通过它进行迭代更好的方法,因为我只需要通过素数进行迭代?对于第二个数组,我将删除所有可以被2除的数组,然后删除所有可以被4除的数组(应该没有),依此类推。

您可能只需将数字复制到一个新数组,然后对其执行
ForEach
。我不认为有更好的方法。

我选择这样做:

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

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

不要使用列表来筛选埃拉托斯烯,使用位数组。