예제 #1
0
 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));
         }
     }
 }
예제 #2
0
        /// <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());
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
 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));
         }
     }
 }