Honor cached cycle when it matches the exponent

This commit is contained in:
Marek Lemańczyk committed 2025-10-09 03:36:04 +02:00
1 parent 64c08f9b49
commit 574e4b8007
1 file changed
+18 -19
@@ -80,9 +80,9 @@ public sealed class MersenneNumberDivisorByDivisorCpuTester : IMersenneNumberDiv
return true;
}
ulong processedCount;
ulong lastProcessed;
bool processedAll;
ulong processedCount = 0UL;
ulong lastProcessed = 0UL;
bool processedAll = false;
bool composite = CheckDivisors(
prime,
@@ -95,7 +95,7 @@ public sealed class MersenneNumberDivisorByDivisorCpuTester : IMersenneNumberDiv
{
lock (_sync)
{
UpdateStatusUnsafe(processedCount);
UpdateStatusUnsafe(lastProcessed, processedCount);
}
}
@@ -238,20 +238,19 @@ public sealed class MersenneNumberDivisorByDivisorCpuTester : IMersenneNumberDiv
}
}
if (divisorCycle != 0 && divisorCycle == prime)
{
processedAll = true;
return true;
}
else if (divisorCycle == 0)
{
Console.WriteLine($"Divisor cycle wasn't calculated for ${prime}");
}
// if (divisorCycle != 0UL && CheckDivisor(prime, divisorCycle, divisorData) != 0)
// {
// processedAll = true;
// return true;
// }
if (divisorCycle == prime)
{
// A cycle equal to the tested exponent (which is prime in this path)
// guarantees that the candidate divides the corresponding Mersenne
// number because the order of 2 modulo the divisor is exactly p.
processedAll = true;
return true;
}
if (divisorCycle == 0UL)
{
Console.WriteLine($"Divisor cycle was not calculated for {prime}");
}
}
divisor += step;
@@ -284,7 +283,7 @@ public sealed class MersenneNumberDivisorByDivisorCpuTester : IMersenneNumberDiv
return (byte)sum;
}
private void UpdateStatusUnsafe(ulong processedCount)
private void UpdateStatusUnsafe(ulong lastProcessed, ulong processedCount)
{
if (processedCount == 0UL)
{