namespace PerfectNumbers.Core; public interface IMersenneNumberDivisorByDivisorTester { int BatchSize { get; set; } void ConfigureFromMaxPrime(ulong maxPrime); ulong DivisorLimit { get; } ulong GetAllowedMaxDivisor(ulong prime); bool IsPrime(ulong prime, out bool divisorsExhausted); IDivisorScanSession CreateDivisorSession(); void PrepareCandidates(in ReadOnlySpan primes, Span allowedMaxValues); public interface IDivisorScanSession { void CheckDivisor(ulong divisor, in MontgomeryDivisorData divisorData, ulong divisorCycle, in ReadOnlySpan primes, Span hits); void Dispose(); } }