From ee2df92a15de506ed7c11f6b747a4e2ff3dd7dd3 Mon Sep 17 00:00:00 2001 From: mlemanczyk Date: Fri, 10 Oct 2025 22:48:28 +0200 Subject: [PATCH] Performance improvement to decrease startup time. --- .../MersenneNumberDivisorByDivisorTester.cs | 45 +++++++++++-------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/PerfectNumbers.Core/MersenneNumberDivisorByDivisorTester.cs b/PerfectNumbers.Core/MersenneNumberDivisorByDivisorTester.cs index 92ced2b..f5e07a9 100644 --- a/PerfectNumbers.Core/MersenneNumberDivisorByDivisorTester.cs +++ b/PerfectNumbers.Core/MersenneNumberDivisorByDivisorTester.cs @@ -112,9 +112,12 @@ public static class MersenneNumberDivisorByDivisorTester ulong maxPrime = 0UL; int primeWriteIndex = 0; - using IEnumerator primeEnumerator = Prime.Numbers.GetEnumerator(); - bool hasPrime = primeEnumerator.MoveNext(); - ulong currentPrime = hasPrime ? primeEnumerator.Current : 0UL; + // This implementation is terribly slow, while this method expect prime p given as --filter-p input already. + // We don't need to additionally check it. + + // using IEnumerator primeEnumerator = Prime.Numbers.GetEnumerator(); + // bool hasPrime = primeEnumerator.MoveNext(); + // ulong currentPrime = hasPrime ? primeEnumerator.Current : 0UL; for (int index = startIndex; index < candidateCount; index++) { @@ -127,25 +130,29 @@ public static class MersenneNumberDivisorByDivisorTester continue; } - while (hasPrime && currentPrime < candidate) - { - hasPrime = primeEnumerator.MoveNext(); - if (!hasPrime) - { - break; - } + // This implementation is terribly slow, while this method expect prime p given as --filter-p input already. + // We don't need to additionally check it. + + // while (hasPrime && currentPrime < candidate) + // { + // hasPrime = primeEnumerator.MoveNext(); + // if (!hasPrime) + // { + // break; + // } - currentPrime = primeEnumerator.Current; - } + // currentPrime = primeEnumerator.Current; + // } - if (!hasPrime || currentPrime != candidate) - { - markComposite(); - printResult(candidate, false, false, false); - continue; - } + // if (!hasPrime || currentPrime != candidate) + // if (!Number.IsPrime(candidate)) + // { + // markComposite(); + // printResult(candidate, false, false, false); + // continue; + // } - primesSpan[primeWriteIndex++] = candidate; + primesSpan[primeWriteIndex++] = candidate; if (candidate > maxPrime) {