Switched to .IsPrime which performed best in benchmarks.

This commit is contained in:
mlemanczyk committed 2025-10-26 04:05:00 +01:00
1 parent 6e632ba03a
commit 1ed5afe689
2 files changed
+13 -7

No files matched your search

+1 -1
View File
@@ -4,7 +4,7 @@ namespace PerfectNumbers.Core;
public static class HeuristicPrimeSieves public static class HeuristicPrimeSieves
{ {
private const int SieveLength = PerfectNumberConstants.MaxQForDivisorCycles; private const int SieveLength = PerfectNumberConstants.MaxQForDivisorCycles / 4;
private const int Wheel210 = 210; private const int Wheel210 = 210;
private static readonly int[] GroupAConstants = [3, 7, 11, 13]; private static readonly int[] GroupAConstants = [3, 7, 11, 13];
@@ -1122,8 +1122,9 @@ internal static partial class PrimeOrderCalculator
// continue; // continue;
// } // }
bool isPrime = primeTester.HeuristicIsPrimeGpu(composite); // bool isPrime = primeTester.HeuristicIsPrimeGpu(composite);
// bool isPrime = PrimeTester.IsPrimeInternal(composite, CancellationToken.None); // bool isPrime = PrimeTester.IsPrimeInternal(composite, CancellationToken.None);
bool isPrime = PrimeTester.LegacyIsPrimeInternal(composite, CancellationToken.None);
// bool isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(composite); // bool isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(composite);
if (isPrime) if (isPrime)
@@ -1184,8 +1185,9 @@ internal static partial class PrimeOrderCalculator
if (!entry.HasKnownPrimality) if (!entry.HasKnownPrimality)
{ {
bool isPrime = primeTester.HeuristicIsPrimeGpu(composite); // bool isPrime = primeTester.HeuristicIsPrimeGpu(composite);
// bool isPrime = PrimeTester.IsPrimeInternal(composite, CancellationToken.None); // bool isPrime = PrimeTester.IsPrimeInternal(composite, CancellationToken.None);
bool isPrime = PrimeTester.LegacyIsPrimeInternal(composite, CancellationToken.None);
// bool isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(composite); // bool isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(composite);
entry = entry.WithPrimality(isPrime); entry = entry.WithPrimality(isPrime);
@@ -1216,8 +1218,9 @@ internal static partial class PrimeOrderCalculator
} }
else else
{ {
cofactorIsPrime = primeTester.HeuristicIsPrimeGpu(cofactor); // cofactorIsPrime = primeTester.HeuristicIsPrimeGpu(cofactor);
// cofactorIsPrime = PrimeTester.IsPrimeInternal(cofactor, CancellationToken.None); // cofactorIsPrime = PrimeTester.IsPrimeInternal(cofactor, CancellationToken.None);
cofactorIsPrime = PrimeTester.LegacyIsPrimeInternal(cofactor, CancellationToken.None);
// cofactorIsPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(cofactor); // cofactorIsPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(cofactor);
} }
@@ -1748,8 +1751,9 @@ internal static partial class PrimeOrderCalculator
PrimeTester primeTester = PrimeTester.Exclusive; PrimeTester primeTester = PrimeTester.Exclusive;
bool isPrime = primeTester.HeuristicIsPrimeGpu(value); // bool isPrime = primeTester.HeuristicIsPrimeGpu(value);
// bool isPrime = PrimeTester.IsPrimeInternal(value, CancellationToken.None); // bool isPrime = PrimeTester.IsPrimeInternal(value, CancellationToken.None);
bool isPrime = PrimeTester.LegacyIsPrimeInternal(value, CancellationToken.None);
// bool isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(value); // bool isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(value);
if (!knownComposite && isPrime) if (!knownComposite && isPrime)
{ {
@@ -1760,8 +1764,9 @@ internal static partial class PrimeOrderCalculator
ulong factor = PollardRhoStrict(value); ulong factor = PollardRhoStrict(value);
ulong quotient = value / factor; ulong quotient = value / factor;
isPrime = primeTester.HeuristicIsPrimeGpu(factor); // isPrime = primeTester.HeuristicIsPrimeGpu(factor);
// isPrime = PrimeTester.IsPrimeInternal(factor, CancellationToken.None); // isPrime = PrimeTester.IsPrimeInternal(factor, CancellationToken.None);
isPrime = PrimeTester.LegacyIsPrimeInternal(factor, CancellationToken.None);
// isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(factor); // isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(factor);
if (isPrime) if (isPrime)
{ {
@@ -1791,8 +1796,9 @@ internal static partial class PrimeOrderCalculator
} }
else else
{ {
isPrime = primeTester.HeuristicIsPrimeGpu(quotient); // isPrime = primeTester.HeuristicIsPrimeGpu(quotient);
// isPrime = PrimeTester.IsPrimeInternal(quotient, CancellationToken.None); // isPrime = PrimeTester.IsPrimeInternal(quotient, CancellationToken.None);
isPrime = PrimeTester.LegacyIsPrimeInternal(quotient, CancellationToken.None);
// isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(quotient); // isPrime = Open.Numeric.Primes.Prime.Numbers.IsPrime(quotient);
} }