예제 #1
0
        private static void BenchmarkPrimalityTests()
        {
            var limit = (int)1e6;

            var sw   = Stopwatch.StartNew();
            var last = PrimeNumberUtil.GetPrimes(new IterativePrimalityTest()).First(x => x > limit);

            sw.Stop();
            var timeIterativePrimalityTest = sw.Elapsed;

            Console.WriteLine($"Iterative test took    {timeIterativePrimalityTest} for {limit} iterations.");

            sw   = Stopwatch.StartNew();
            last = PrimeNumberUtil.GetPrimes(new FermatPrimalityTest()).First(x => x > limit);
            sw.Stop();
            var timeFermatPrimalityTest = sw.Elapsed;

            Console.WriteLine($"Fermat test took       {timeFermatPrimalityTest} for {limit} iterations.");

            sw   = Stopwatch.StartNew();
            last = PrimeNumberUtil.GetPrimes(new MillerRabinPrimalityTest()).First(x => x > limit);
            sw.Stop();
            var timeMillerRabinPrimalityTest = sw.Elapsed;

            Console.WriteLine($"Miller-Rabin test took {timeMillerRabinPrimalityTest} for {limit} iterations.");
        }
예제 #2
0
        static void Main(string[] args)
        {
            try
            {
                // retrieve the limits.
                int lowerLimit = 1;
                int upperLimit = 20;

                RetrieveUpperAndLowerLimit(out lowerLimit, out upperLimit);

                //Instiate the class.
                PrimeNumberUtil prime = new PrimeNumberUtil();

                //Get List of Prime numbers
                string primes = prime.GetListOfPrimeNumbers(lowerLimit, upperLimit);

                //Wriite out to console
                Console.WriteLine("The prime numbers are:");
                Console.WriteLine(primes);

                //Read to line.
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine(String.Format("There was an exception while attemption to find the prime numbers.", ex));
            }
        }
예제 #3
0
        public void ListofPrimeNumbersTest_ArgumentException()
        {
            //Initiate class.
            PrimeNumberUtil prime = new PrimeNumberUtil();

            //Throws argument exception when given bad order of limits.
            Assert.ThrowsException <ArgumentException>(() => prime.GetListOfPrimeNumbers(20, 0));
        }
예제 #4
0
 private static void GetPQ(long minP, long minQ, out long p, out long q)
 {
     p = PrimeNumberUtil.GetPrimes(new FermatPrimalityTest())
         .Where(x => x % 4 == 3)
         .Where(x => x > minP)
         .First();
     q = PrimeNumberUtil.GetPrimes(new FermatPrimalityTest())
         .Where(x => x % 4 == 3)
         .Where(x => x > minQ)
         .First();
 }
예제 #5
0
        public void ListofPrimeNumbersTest_IsEmpty()
        {
            //Initiate class.
            PrimeNumberUtil prime = new PrimeNumberUtil();

            //Get the string.
            string primeNumbers = prime.GetListOfPrimeNumbers(1, 1);

            //Make sure it is not null.
            Assert.IsTrue(string.IsNullOrEmpty(primeNumbers));
        }
예제 #6
0
        public void ListofPrimeNumbersTest_ReturnList()
        {
            //Initiate class.
            PrimeNumberUtil prime = new PrimeNumberUtil();

            //Get the string.
            string primeNumbers = prime.GetListOfPrimeNumbers(1, 20);

            //Make sure it is not null.
            Assert.IsNotNull(primeNumbers);
        }
예제 #7
0
        private static void ComparePrimalityTests()
        {
            const int limit = (int)1e3;

            var iterativeResult = PrimeNumberUtil.GetPrimes(new IterativePrimalityTest())
                                  .TakeWhile(x => x < limit).ToList();
            var fermatResult = PrimeNumberUtil.GetPrimes(new FermatPrimalityTest())
                               .TakeWhile(x => x < limit).ToList();
            var millerRabinResult = PrimeNumberUtil.GetPrimes(new MillerRabinPrimalityTest())
                                    .TakeWhile(x => x < limit).ToList();

            Console.WriteLine($"Iterative Method yielded    {iterativeResult.Count} primes < {limit}");
            Console.WriteLine(String.Join(", ", iterativeResult));
            Console.WriteLine($"Fermat Method yielded       {fermatResult.Count} primes < {limit}");
            Console.WriteLine(String.Join(", ", fermatResult));
            Console.WriteLine($"Miller-Rabin Method yielded {millerRabinResult.Count} primes < {limit}");
            Console.WriteLine(String.Join(", ", millerRabinResult));
            Console.WriteLine("Miller-Rabin is missing: " + String.Join(", ", iterativeResult.Except(millerRabinResult)));
        }