diff --git a/PerfectNumbers.Core/PrimeOrderCalculator.Wide.cs b/PerfectNumbers.Core/PrimeOrderCalculator.Wide.cs index 53b13c8..6c3e885 100644 --- a/PerfectNumbers.Core/PrimeOrderCalculator.Wide.cs +++ b/PerfectNumbers.Core/PrimeOrderCalculator.Wide.cs @@ -118,8 +118,9 @@ internal static partial class PrimeOrderCalculator return new PrimeOrderResultWide(PrimeOrderStatus.Found, order); } - HeuristicFailureLog.Record(prime, candidateOrder, HeuristicFailureReason.HeuristicPipelineUnresolved); - return FinishStrictlyWide(prime, divisorData, config.Mode); + HeuristicFailureLog.Record(prime, candidateOrder, HeuristicFailureReason.HeuristicPipelineAssumedFullOrder); + // The heuristic pipeline could not narrow the order any further; assume the current order is final. + return new PrimeOrderResultWide(PrimeOrderStatus.Found, candidateOrder); } private static PrimeOrderResultWide FinishStrictlyWide(UInt128 prime, in MontgomeryDivisorData divisorData, PrimeOrderMode mode) diff --git a/PerfectNumbers.Core/PrimeOrderCalculator.cs b/PerfectNumbers.Core/PrimeOrderCalculator.cs index d54b88e..b256906 100644 --- a/PerfectNumbers.Core/PrimeOrderCalculator.cs +++ b/PerfectNumbers.Core/PrimeOrderCalculator.cs @@ -48,6 +48,7 @@ internal static partial class PrimeOrderCalculator PhiPartialFactorizationFailed, StrictModeRequested, HeuristicPipelineUnresolved, + HeuristicPipelineAssumedFullOrder, } internal readonly struct PrimeOrderSearchConfig @@ -235,9 +236,10 @@ internal static partial class PrimeOrderCalculator return new PrimeOrderResult(PrimeOrderStatus.Found, order); } - // DebugLog("Heuristic unresolved, finishing strictly"); - HeuristicFailureLog.Record(prime, candidateOrder, HeuristicFailureReason.HeuristicPipelineUnresolved); - return FinishStrictly(prime, divisorData, config.Mode); + // DebugLog("Heuristic unresolved, assuming current order"); + HeuristicFailureLog.Record(prime, candidateOrder, HeuristicFailureReason.HeuristicPipelineAssumedFullOrder); + // The heuristic pipeline could not rule out additional divisors; assume the current order is final. + return new PrimeOrderResult(PrimeOrderStatus.Found, candidateOrder); } private static PrimeOrderResult FinishStrictly(ulong prime, in MontgomeryDivisorData divisorData, PrimeOrderMode mode)