2013-07-03 35 views
0

我試圖使用Sieve of Eratosthenes在列表中找到質數。我試過這個:通過與Linq的更改列表進行迭代

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

但它沒有工作,因爲你不能迭代列表正在改變。 有沒有更好的辦法比創建另一個數組和迭代槽,因爲我只需要迭代谷素數?使用第二個數組,我將刪除可以除以2的所有內容,然後刪除可以除以4的所有內容(應該沒有)等等...

謝謝您的答案。

+0

不要使用列表的Eratosthenes篩,使用位陣列。 – starblue

回答

0

我選擇這樣做的:

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

它的工作仍然相當快,乾淨。

0

你應該把這些數字複製到一個新的數組中,然後在ForEach上做這個。我不認爲有更好的方法。