public void TestSieve(IPrimeSieve ps) { for(var i = 0U; i < limit; i++ ) { if(primes.Contains((int)i)) { Assert.IsTrue(ps.IsPrime(i)); } else { Assert.IsFalse(ps.IsPrime(i)); } } }
/// <summary> /// Generates primes less than <paramref name="maxExlusive"/>. /// </summary> /// <param name="maxExlusive">The number up to which to create primes.</param> /// <param name="sieve">The sieve to use for the prime number generation.</param> /// <returns>An array with primes less than <paramref name="maxExlusive"/>.</returns> public static long[] GeneratePrimesUpTo(int maxExlusive, IPrimeSieve sieve = null) { var result = new List <long>(); sieve = sieve ?? GetSieve(); foreach (var prime in sieve.GetPrimes(maxExlusive)) { if (prime >= maxExlusive) { break; } result.Add(prime); } return(result.ToArray()); }
/// <summary> /// Generates the first <paramref name="count"/> primes. /// </summary> /// <param name="count">The number of primes to generate.</param> /// <param name="sieve">The sieve to use for the prime number generation.</param> /// <returns>Containing an array with <paramref name="count"/> primes: 2, 3, 5, ...</returns> public static long[] GeneratePrimes(int count, IPrimeSieve sieve = null) { var result = new long[count]; sieve = sieve ?? GetSieve(); int i = 0; long endNumber = (long)(100 + 1.1056 * count / Math.Log(count)); foreach (var prime in sieve.GetPrimes(endNumber)) { result[i++] = prime; if (i >= count) { break; } } return(result); }
private void TestSieveGrow(IPrimeSieve ps) { for (var i = 0U; i < 1000U; i++) { if (primes.Contains((int)i)) { Assert.IsTrue(ps.IsPrime(i)); } else { Assert.IsFalse(ps.IsPrime(i)); } } }