Merge pull request #139 from mlemanczyk/codex/adjust-heuristics-for-divisor-detection

Assume full order when heuristics cannot find divisors
This commit is contained in:
Marek Lemańczyk authored and GitHub committed 2025-10-09 23:13:50 +02:00
commit 74e9e88977
2 files changed
+8 -5

No files matched your search

@@ -118,8 +118,9 @@ internal static partial class PrimeOrderCalculator
return new PrimeOrderResultWide(PrimeOrderStatus.Found, order); return new PrimeOrderResultWide(PrimeOrderStatus.Found, order);
} }
HeuristicFailureLog.Record(prime, candidateOrder, HeuristicFailureReason.HeuristicPipelineUnresolved); HeuristicFailureLog.Record(prime, candidateOrder, HeuristicFailureReason.HeuristicPipelineAssumedFullOrder);
return FinishStrictlyWide(prime, divisorData, config.Mode); // 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) private static PrimeOrderResultWide FinishStrictlyWide(UInt128 prime, in MontgomeryDivisorData divisorData, PrimeOrderMode mode)
+5 -3
View File
@@ -48,6 +48,7 @@ internal static partial class PrimeOrderCalculator
PhiPartialFactorizationFailed, PhiPartialFactorizationFailed,
StrictModeRequested, StrictModeRequested,
HeuristicPipelineUnresolved, HeuristicPipelineUnresolved,
HeuristicPipelineAssumedFullOrder,
} }
internal readonly struct PrimeOrderSearchConfig internal readonly struct PrimeOrderSearchConfig
@@ -235,9 +236,10 @@ internal static partial class PrimeOrderCalculator
return new PrimeOrderResult(PrimeOrderStatus.Found, order); return new PrimeOrderResult(PrimeOrderStatus.Found, order);
} }
// DebugLog("Heuristic unresolved, finishing strictly"); // DebugLog("Heuristic unresolved, assuming current order");
HeuristicFailureLog.Record(prime, candidateOrder, HeuristicFailureReason.HeuristicPipelineUnresolved); HeuristicFailureLog.Record(prime, candidateOrder, HeuristicFailureReason.HeuristicPipelineAssumedFullOrder);
return FinishStrictly(prime, divisorData, config.Mode); // 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) private static PrimeOrderResult FinishStrictly(ulong prime, in MontgomeryDivisorData divisorData, PrimeOrderMode mode)