From e9cff7bfcd94d599efaab329d9e420ae5c107d05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Lema=C5=84czyk?= Date: Mon, 20 Oct 2025 00:51:10 +0200 Subject: [PATCH] Reuse heuristic prime order config across runtime --- PerfectNumbers.Core/PrimeOrderCalculator.cs | 10 +++++++++- PerfectNumbers.Core/UnboundedTaskScheduler.cs | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) 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) {