public void ComplexReimannZetaPrimesTest() { // pick high enough values so that p^-x == 1 within double precision before we reach the end of our list of primes foreach (Complex z in TestUtilities.GenerateComplexValues(1.0, 100.0, 8)) { Complex zz = z; if (zz.Re < 0.0) { zz = -zz; } zz += 10.0; Console.WriteLine(zz); Complex f = 1.0; for (int p = 2; p < 100; p++) { if (!AdvancedIntegerMath.IsPrime(p)) { continue; } Complex t = Complex.One - ComplexMath.Pow(p, -zz); if (t == Complex.One) { break; } f = f * t; } Assert.IsTrue(TestUtilities.IsNearlyEqual(1.0 / AdvancedComplexMath.RiemannZeta(zz), f)); } }
private int CountPrimes(int n) { int count = 0; for (int k = 1; k <= n; k++) { if (AdvancedIntegerMath.IsPrime(k)) { count++; } } return(count); }
public void PrimeSpecialCases() { // small numbers Assert.IsFalse(AdvancedIntegerMath.IsPrime(1)); Assert.IsTrue(AdvancedIntegerMath.IsPrime(2)); Assert.IsTrue(AdvancedIntegerMath.IsPrime(3)); Assert.IsFalse(AdvancedIntegerMath.IsPrime(4)); Assert.IsTrue(AdvancedIntegerMath.IsPrime(5)); Assert.IsFalse(AdvancedIntegerMath.IsPrime(6)); Assert.IsTrue(AdvancedIntegerMath.IsPrime(7)); Assert.IsFalse(AdvancedIntegerMath.IsPrime(8)); Assert.IsFalse(AdvancedIntegerMath.IsPrime(9)); Assert.IsFalse(AdvancedIntegerMath.IsPrime(10)); // Mersene prime candidates Assert.IsTrue(AdvancedIntegerMath.IsPrime(3)); // 2^2 - 1 Assert.IsTrue(AdvancedIntegerMath.IsPrime(7)); // 2^3 - 1 Assert.IsTrue(AdvancedIntegerMath.IsPrime(31)); // 2^5 - 1 Assert.IsTrue(AdvancedIntegerMath.IsPrime(127)); // 2^7 - 1 Assert.IsFalse(AdvancedIntegerMath.IsPrime(2047)); // 2^11 - 1 Assert.IsTrue(AdvancedIntegerMath.IsPrime(8191)); // 2^13 - 1 Assert.IsTrue(AdvancedIntegerMath.IsPrime(131071)); // 2^17 - 1 Assert.IsTrue(AdvancedIntegerMath.IsPrime(524287)); // 2^19 - 1 Assert.IsFalse(AdvancedIntegerMath.IsPrime(8388607)); // 2^23 - 1 Assert.IsFalse(AdvancedIntegerMath.IsPrime(536870911)); // 2^29 - 1 Assert.IsTrue(AdvancedIntegerMath.IsPrime(2147483647)); // 2^31 - 1 // Pseudoprimes Assert.IsFalse(AdvancedIntegerMath.IsPrime(2047)); Assert.IsFalse(AdvancedIntegerMath.IsPrime(3277)); Assert.IsFalse(AdvancedIntegerMath.IsPrime(4033)); Assert.IsFalse(AdvancedIntegerMath.IsPrime(121)); Assert.IsFalse(AdvancedIntegerMath.IsPrime(703)); Assert.IsFalse(AdvancedIntegerMath.IsPrime(1891)); Assert.IsFalse(AdvancedIntegerMath.IsPrime(781)); Assert.IsFalse(AdvancedIntegerMath.IsPrime(1541)); // Fermat primes Assert.IsTrue(AdvancedIntegerMath.IsPrime(5)); // 2^2 + 1 Assert.IsTrue(AdvancedIntegerMath.IsPrime(17)); // 2^4 + 1 Assert.IsTrue(AdvancedIntegerMath.IsPrime(257)); // 2^8 + 1 Assert.IsTrue(AdvancedIntegerMath.IsPrime(65537)); // 2^16 + 1 // Euler's nonprime Assert.IsFalse(AdvancedIntegerMath.IsPrime(1000009)); // 1000009 = 293 * 3413 }