diff --git a/PerfectNumbers.Core/Cpu/MersenneCpuDivisorScanSession.cs b/PerfectNumbers.Core/Cpu/MersenneCpuDivisorScanSession.cs index c6d936e..2ab7e20 100644 --- a/PerfectNumbers.Core/Cpu/MersenneCpuDivisorScanSession.cs +++ b/PerfectNumbers.Core/Cpu/MersenneCpuDivisorScanSession.cs @@ -35,8 +35,14 @@ internal sealed class MersenneCpuDivisorScanSession : IMersenneNumberDivisorByDi divisorCycle = DivisorCycleCache.Shared.GetCycleLength(divisor); if (divisorCycle == 0UL) { - hits.Clear(); - return; + divisorCycle = MersenneDivisorCycles.CalculateCycleLength( + divisor, + cachedData, + skipPrimeOrderHeuristic: true); + if (divisorCycle == 0UL) + { + throw new InvalidOperationException($"Failed to compute a cycle for divisor {divisor}."); + } } } @@ -45,8 +51,7 @@ internal sealed class MersenneCpuDivisorScanSession : IMersenneNumberDivisorByDi var exponentStepper = new ExponentRemainderStepper(cachedData); if (!exponentStepper.IsValidModulus) { - hits.Clear(); - return; + throw new InvalidOperationException($"Invalid modulus {cachedData.Modulus} for divisor scans."); } var cycleStepper = new CycleRemainderStepper(divisorCycle);