From 1ed5afe689a80eae1d22be428e780053f542adcb Mon Sep 17 00:00:00 2001 From: mlemanczyk Date: Sun, 26 Oct 2025 04:05:00 +0100 Subject: [PATCH] Switched to .IsPrime which performed best in benchmarks. --- PerfectNumbers.Core/HeuristicPrimeSieves.cs | 2 +- .../PrimeOrderCalculator.Cpu.cs | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/PerfectNumbers.Core/HeuristicPrimeSieves.cs b/PerfectNumbers.Core/HeuristicPrimeSieves.cs index 33488fe..9bc0acc 100644 --- a/PerfectNumbers.Core/HeuristicPrimeSieves.cs +++ b/PerfectNumbers.Core/HeuristicPrimeSieves.cs @@ -4,7 +4,7 @@ namespace PerfectNumbers.Core; public static class HeuristicPrimeSieves { - private const int SieveLength = PerfectNumberConstants.MaxQForDivisorCycles; + private const int SieveLength = PerfectNumberConstants.MaxQForDivisorCycles / 4; private const int Wheel210 = 210; private static readonly int[] GroupAConstants = [3, 7, 11, 13]; diff --git a/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs b/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs index 3e3d5f6..b7a8665 100644 --- a/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs +++ b/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs @@ -1122,8 +1122,9 @@ internal static partial class PrimeOrderCalculator // continue; // } - bool isPrime = primeTester.HeuristicIsPrimeGpu(composite); + // bool isPrime = primeTester.HeuristicIsPrimeGpu(composite); // bool isPrime = PrimeTester.IsPrimeInternal(composite, CancellationToken.None); + bool isPrime = PrimeTester.LegacyIsPrimeInternal(composite, CancellationToken.None); // bool isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(composite); if (isPrime) @@ -1184,8 +1185,9 @@ internal static partial class PrimeOrderCalculator if (!entry.HasKnownPrimality) { - bool isPrime = primeTester.HeuristicIsPrimeGpu(composite); + // bool isPrime = primeTester.HeuristicIsPrimeGpu(composite); // bool isPrime = PrimeTester.IsPrimeInternal(composite, CancellationToken.None); + bool isPrime = PrimeTester.LegacyIsPrimeInternal(composite, CancellationToken.None); // bool isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(composite); entry = entry.WithPrimality(isPrime); @@ -1216,8 +1218,9 @@ internal static partial class PrimeOrderCalculator } else { - cofactorIsPrime = primeTester.HeuristicIsPrimeGpu(cofactor); + // cofactorIsPrime = primeTester.HeuristicIsPrimeGpu(cofactor); // cofactorIsPrime = PrimeTester.IsPrimeInternal(cofactor, CancellationToken.None); + cofactorIsPrime = PrimeTester.LegacyIsPrimeInternal(cofactor, CancellationToken.None); // cofactorIsPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(cofactor); } @@ -1748,8 +1751,9 @@ internal static partial class PrimeOrderCalculator PrimeTester primeTester = PrimeTester.Exclusive; - bool isPrime = primeTester.HeuristicIsPrimeGpu(value); + // bool isPrime = primeTester.HeuristicIsPrimeGpu(value); // bool isPrime = PrimeTester.IsPrimeInternal(value, CancellationToken.None); + bool isPrime = PrimeTester.LegacyIsPrimeInternal(value, CancellationToken.None); // bool isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(value); if (!knownComposite && isPrime) { @@ -1760,8 +1764,9 @@ internal static partial class PrimeOrderCalculator ulong factor = PollardRhoStrict(value); ulong quotient = value / factor; - isPrime = primeTester.HeuristicIsPrimeGpu(factor); + // isPrime = primeTester.HeuristicIsPrimeGpu(factor); // isPrime = PrimeTester.IsPrimeInternal(factor, CancellationToken.None); + isPrime = PrimeTester.LegacyIsPrimeInternal(factor, CancellationToken.None); // isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(factor); if (isPrime) { @@ -1791,8 +1796,9 @@ internal static partial class PrimeOrderCalculator } else { - isPrime = primeTester.HeuristicIsPrimeGpu(quotient); + // isPrime = primeTester.HeuristicIsPrimeGpu(quotient); // isPrime = PrimeTester.IsPrimeInternal(quotient, CancellationToken.None); + isPrime = PrimeTester.LegacyIsPrimeInternal(quotient, CancellationToken.None); // isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(quotient); }