如果我試了一遍,你的代碼試圖找到0和maxNumber之間的最大素數。使用Eratosthenes的篩子查找0和maxNumber的平方根之間的所有素數。然後,您可以從maxNumber迭代到0,得到您剛剛找到的所有素數不可分割的數字。
編輯: 試過這種
var sqrtMax = (int)Math.Sqrt(maxNumber);
var primeCandidates = Enumerable.Range(2, sqrtMax-1)
.ToDictionary(number => number, isComposite => false);
foreach (var number in primeCandidates.Keys.ToArray())
{
if (primeCandidates[number])
{
continue;
}
Parallel.ForEach(Enumerable.Range(2, sqrtMax/number - 1).Select(times => number * times),multiples=>
primeCandidates[multiples] = true);
}
var primeList = primeCandidates.Where(number => !number.Value).Select(pair=>pair.Key).ToArray();
var maxPrime = maxNumber;
while (primeList.AsParallel().Any(prime=> maxPrime%prime==0))
{
maxPrime--;
}
,並在不到3秒找到maxPrime MAXNUMBER = 600881475134(並行,是因爲我認爲這將花費很長的時間)
輸入什麼時候掛起?我沒有看起來很難,但你確定它不僅僅是*花了很長時間*? O(N^2)對於足夠大的N很長。 –
maxNumber的值是多少? –
Eratosthenes篩網:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes –