From b7c187bbc51cdb666a8821a027781a030a0445bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Lema=C5=84czyk?= Date: Sun, 19 Oct 2025 23:16:35 +0200 Subject: [PATCH] Check Pollard Rho deadline inside partial factor loop --- PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs b/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs index fa20429..adf11e0 100644 --- a/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs +++ b/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs @@ -873,6 +873,13 @@ internal static partial class PrimeOrderCalculator { while (compositeStack.Count > 0) { + long currentTimestamp = Stopwatch.GetTimestamp(); + if (currentTimestamp > deadlineTimestamp) + { + pollardRhoDeadlineReached = true; + break; + } + ulong composite = compositeStack.Pop(); // composite will never be smaller than 1 on the execution path // if (composite <= 1UL) @@ -899,7 +906,10 @@ internal static partial class PrimeOrderCalculator compositeStack.Push(quotient); } - pollardRhoDeadlineReached = Stopwatch.GetTimestamp() > deadlineTimestamp; + if (!pollardRhoDeadlineReached) + { + pollardRhoDeadlineReached = Stopwatch.GetTimestamp() > deadlineTimestamp; + } } if (pollardRhoDeadlineReached)