From a9e4dc98c4f113c42946a1a437b60f43f1a81f30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Lema=C5=84czyk?= Date: Sat, 20 Sep 2025 09:39:53 +0200 Subject: [PATCH] Revert "Merge pull request #38 from mlemanczyk/codex/fix-residue-method-iteration-issue" This reverts commit afcc8d87f98f1a341b8d03d59ed76bd96a61db26, reversing changes made to 5702e45169ff2016efa7719717b1332910def866. --- .../ResidueCandidateEnumerationTests.cs | 77 ------------------- EvenPerfectBitScanner/Program.cs | 6 -- 2 files changed, 83 deletions(-) delete mode 100644 EvenPerfectBitScanner.Tests/ResidueCandidateEnumerationTests.cs diff --git a/EvenPerfectBitScanner.Tests/ResidueCandidateEnumerationTests.cs b/EvenPerfectBitScanner.Tests/ResidueCandidateEnumerationTests.cs deleted file mode 100644 index 8d65839..0000000 --- a/EvenPerfectBitScanner.Tests/ResidueCandidateEnumerationTests.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using System.Threading; -using EvenPerfectBitScanner; -using PerfectNumbers.Core; -using Xunit; - -namespace EvenPerfectBitScanner.Tests; - -public class ResidueCandidateEnumerationTests -{ - [Fact] - public void ModResidueTracker_does_not_flag_small_primes_as_composite() - { - var tracker = new ModResidueTracker(ResidueModel.Identity, initialNumber: 13UL, initialized: true); - var primes = PrimesGenerator.SmallPrimes; - var primesPow2 = PrimesGenerator.SmallPrimesPow2; - - ulong p = 13UL; - ulong remainder = p % 6UL; - - for (int i = 0; i < 2000; i++) - { - tracker.BeginMerge(p); - bool composite = false; - for (int j = 0; j < primes.Length; j++) - { - if (primesPow2[j] > p) - { - break; - } - - tracker.MergeOrAppend(p, primes[j], out bool divisible); - if (divisible) - { - composite = true; - break; - } - } - - bool isPrime = PrimeTester.IsPrimeInternal(p, CancellationToken.None); - if (isPrime && composite) - { - throw new InvalidOperationException($"Prime {p} marked as composite."); - } - - p = Program.TransformPAdd(p, ref remainder); - } - } - - [Fact] - public void TransformPAdd_visits_both_prime_residue_classes() - { - ulong p = 13UL; - ulong remainder = p % 6UL; - bool sawOneModSix = false; - bool sawFiveModSix = false; - - for (int i = 0; i < 256; i++) - { - ulong residue = p % 6UL; - if (residue == 1UL) - { - sawOneModSix = true; - } - else if (residue == 5UL) - { - sawFiveModSix = true; - } - - p = Program.TransformPAdd(p, ref remainder); - } - - Assert.True(sawOneModSix, "Sequence never produced numbers congruent to 1 mod 6."); - Assert.True(sawFiveModSix, "Sequence never produced numbers congruent to 5 mod 6."); - } - -} diff --git a/EvenPerfectBitScanner/Program.cs b/EvenPerfectBitScanner/Program.cs index 1e9a6ab..681e3cc 100644 --- a/EvenPerfectBitScanner/Program.cs +++ b/EvenPerfectBitScanner/Program.cs @@ -554,12 +554,6 @@ internal static class Program } bool useFilter = !string.IsNullOrEmpty(filterFile); - if (useFilter && !useBitTransform) - { - // When replaying a filtered list of p values, iterate strictly along the prime sequence. - // This keeps candidate generation aligned with the recorded primes regardless of residue stepping. - _transformP = &TransformPAddPrimes; - } HashSet filter = []; ulong maxP = 0UL; if (useFilter)