diff --git a/PerfectNumbers.Core/PrimeOrderCalculator.cs b/PerfectNumbers.Core/PrimeOrderCalculator.cs index fd2da4b..75c9cd3 100644 --- a/PerfectNumbers.Core/PrimeOrderCalculator.cs +++ b/PerfectNumbers.Core/PrimeOrderCalculator.cs @@ -10,15 +10,23 @@ internal static partial class PrimeOrderCalculator internal readonly struct PrimeOrderSearchConfig(uint smallFactorLimit, int pollardRhoMilliseconds, int maxPowChecks, PrimeOrderMode mode) { + private static PrimeOrderSearchConfig _heuristicDefault = CreateHeuristicDefault(UnboundedTaskScheduler.ConfiguredThreadCount); + public static PrimeOrderSearchConfig HeuristicDefault { get { - return CreateHeuristicDefault(UnboundedTaskScheduler.ConfiguredThreadCount); + return _heuristicDefault; } } + public static readonly PrimeOrderSearchConfig StrictDefault = new(smallFactorLimit: 1_000_000, pollardRhoMilliseconds: 0, maxPowChecks: 0, PrimeOrderMode.Strict); + public static void ConfigureHeuristicDefault(int threadCount) + { + _heuristicDefault = CreateHeuristicDefault(threadCount); + } + public static PrimeOrderSearchConfig CreateHeuristicDefault(int threadCount) { int normalizedThreadCount = threadCount < 1 ? 1 : threadCount; diff --git a/PerfectNumbers.Core/UnboundedTaskScheduler.cs b/PerfectNumbers.Core/UnboundedTaskScheduler.cs index 66912e9..cbfe5fd 100644 --- a/PerfectNumbers.Core/UnboundedTaskScheduler.cs +++ b/PerfectNumbers.Core/UnboundedTaskScheduler.cs @@ -40,6 +40,7 @@ public sealed class UnboundedTaskScheduler : TaskScheduler lock (InstanceLock) { Volatile.Write(ref _configuredThreadCount, normalizedThreadCount); + PrimeOrderCalculator.PrimeOrderSearchConfig.ConfigureHeuristicDefault(normalizedThreadCount); if (_instance is null) {