私が正しく試した場合、コードは 0 と maxNumber の間の最大の素数を見つけようとしています。エラトステネスの篩を使用して、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--;
}
maxNumber = 600881475134 の maxPrime を 3 秒以内で見つけます (並列化は時間がかかると思ったためです)