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);
}
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)
+5 -3
View File
@@ -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)