Revert "Merge pull request #38 from mlemanczyk/codex/fix-residue-method-iteration-issue"

This reverts commit afcc8d87f9, reversing
changes made to 5702e45169.
This commit is contained in:
Marek Lemańczyk committed 2025-09-20 09:39:53 +02:00
1 parent cc1967231c
commit a9e4dc98c4
2 files changed
-83

No files matched your search

@@ -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.");
}
}
-6
View File
@@ -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<ulong> filter = [];
ulong maxP = 0UL;
if (useFilter)