Exemplo n.º 1
0
        /// <summary>
        /// Результат работы программы - время разложения для алгоритмов факторизации на нескольких тестовых выборках чисел
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            BigInteger[,] testNumbersPrime = new BigInteger[11, 2]
            {
                { 373, 1193 },
                { 3877, 4337 },
                { 9743, 10169 },
                { 32479, 32957 },
                { 65183, 65699 },
                { 99707, 100393 },
                { 999563, 1000313 },
                { 16776763, 16777721 },
                { 999999223, 1000000447 },
                { 2147482951, 2147484161 },
                { 4294967779, 4294966553 }
            };

            BigInteger[] testNumbersNotPrime = new BigInteger[11];

            for (int i = 0; i < testNumbersNotPrime.Length; i++)
            {
                testNumbersNotPrime[i] = testNumbersPrime[i, 0] * testNumbersPrime[i, 1];
            }

            BigInteger[] testNumbersNotPrimeFarAway = new BigInteger[8];

            for (int i = 0; i < testNumbersNotPrimeFarAway.Length; i++)
            {
                testNumbersNotPrimeFarAway[i] = testNumbersPrime[i, 0] * testNumbersPrime[testNumbersNotPrimeFarAway.Length - 1 - i, 1];
            }

            TrialDivisionMethod divisionCheck = new TrialDivisionMethod();
            Ferma    ferma    = new Ferma();
            Leman    leman    = new Leman();
            PPollard pPollard = new PPollard();

            BigInteger resultForDivisionCheck = 0;
            BigInteger resultForFerma         = 0;
            BigInteger resultForLeman         = 0;
            BigInteger resultForPPollard      = 0;

            const int column = 0;

            Stopwatch stopwatch = new Stopwatch();

            Console.WriteLine("Prime");

            for (int i = 0; i < testNumbersPrime.Length; i++)
            {
                Console.WriteLine("\t DivCheck | Ferma | Leman | pPollard");
                Console.Write(testNumbersPrime[i, column]);

                stopwatch.Start();
                resultForDivisionCheck = divisionCheck.Factor(testNumbersPrime[i, column]);
                stopwatch.Stop();
                Console.Write(" {0}:{1}", resultForDivisionCheck, stopwatch.ElapsedMilliseconds);

                stopwatch.Reset();

                if (testNumbersPrime[i, 0] <= 999999223)
                {
                    stopwatch.Start();
                    resultForFerma = ferma.Factor(testNumbersPrime[i, column]);
                    stopwatch.Stop();
                    Console.Write(" {0}:{1}", resultForFerma, stopwatch.ElapsedMilliseconds);
                }

                stopwatch.Reset();

                stopwatch.Start();
                resultForLeman = leman.Factor(testNumbersPrime[i, column]);
                stopwatch.Stop();
                Console.Write(" {0}:{1}", resultForLeman, stopwatch.ElapsedMilliseconds);

                stopwatch.Reset();

                stopwatch.Start();
                resultForPPollard = pPollard.Factor(testNumbersPrime[i, column]);
                stopwatch.Stop();
                Console.WriteLine(" {0}:{1}", resultForPPollard, stopwatch.ElapsedMilliseconds);

                Console.WriteLine("----------------------------------");
            }

            Console.WriteLine("NotPrime");

            for (int i = 0; i < testNumbersNotPrime.Length; i++)
            {
                Console.WriteLine("\t DivCheck | Ferma | Leman | pPollard");
                Console.Write(testNumbersNotPrime[i]);

                if (testNumbersNotPrime[i] <= 999875863219)
                {
                    stopwatch.Start();
                    resultForDivisionCheck = divisionCheck.Factor(testNumbersNotPrime[i]);
                    stopwatch.Stop();
                    Console.Write(" {0}:{1}", resultForDivisionCheck, stopwatch.ElapsedMilliseconds);
                }

                stopwatch.Reset();

                stopwatch.Start();
                resultForFerma = ferma.Factor(testNumbersNotPrime[i]);
                stopwatch.Stop();
                Console.Write(" {0}:{1}", resultForFerma, stopwatch.ElapsedMilliseconds);

                stopwatch.Reset();

                stopwatch.Start();
                resultForLeman = leman.Factor(testNumbersNotPrime[i]);
                stopwatch.Stop();
                Console.Write(" {0}:{1}", resultForLeman, stopwatch.ElapsedMilliseconds);

                stopwatch.Reset();

                stopwatch.Start();
                resultForPPollard = pPollard.Factor(testNumbersNotPrime[i]);
                stopwatch.Stop();
                Console.WriteLine(" {0}:{1}", resultForPPollard, stopwatch.ElapsedMilliseconds);

                Console.WriteLine("----------------------------------");
            }

            Console.WriteLine("NotPrimeFarAway");

            for (int i = 0; i < testNumbersNotPrimeFarAway.Length; i++)
            {
                Console.WriteLine("\t DivCheck | Ferma | Leman | pPollard");
                Console.Write(testNumbersNotPrimeFarAway[i]);

                stopwatch.Start();
                resultForDivisionCheck = divisionCheck.Factor(testNumbersNotPrimeFarAway[i]);
                stopwatch.Stop();
                Console.Write(" {0}:{1}", resultForDivisionCheck, stopwatch.ElapsedMilliseconds);

                stopwatch.Reset();

                stopwatch.Start();
                resultForFerma = ferma.Factor(testNumbersNotPrimeFarAway[i]);
                stopwatch.Stop();
                Console.Write(" {0}:{1}", resultForFerma, stopwatch.ElapsedMilliseconds);

                stopwatch.Reset();

                stopwatch.Start();
                resultForLeman = leman.Factor(testNumbersNotPrimeFarAway[i]);
                stopwatch.Stop();
                Console.Write(" {0}:{1}", resultForLeman, stopwatch.ElapsedMilliseconds);

                stopwatch.Reset();

                stopwatch.Start();
                resultForPPollard = pPollard.Factor(testNumbersNotPrimeFarAway[i]);
                stopwatch.Stop();
                Console.WriteLine(" {0}:{1}", resultForPPollard, stopwatch.ElapsedMilliseconds);

                Console.WriteLine("----------------------------------");
            }
            //{
            //    2305843009213693951,
            //    489133282872437279,
            //    99194853094755497,
            //    1111111111111111111
            //};
        }
Exemplo n.º 2
0
        public void Prime10169()
        {
            Res = PPollard.Factor(10169);

            Assert.AreEqual(1, Res);
        }
Exemplo n.º 3
0
        public void Prime1000313()
        {
            Res = PPollard.Factor(1000313);

            Assert.AreEqual(1, Res);
        }
Exemplo n.º 4
0
        public void Prime96253()
        {
            Res = PPollard.Factor(96253);

            Assert.AreEqual(101, Res);
        }
Exemplo n.º 5
0
        public void Prime3()
        {
            Res = PPollard.Factor(3);

            Assert.AreEqual(1, Res);
        }
Exemplo n.º 6
0
        public void Prime950695021()
        {
            Res = PPollard.Factor(950695021);

            Assert.AreEqual(10007, Res);
        }
Exemplo n.º 7
0
        public void Prime9596599()
        {
            Res = PPollard.Factor(9596599);

            Assert.AreEqual(1009, Res);
        }
Exemplo n.º 8
0
        public void Prime950001915000209()
        {
            Res = PPollard.Factor(950001915000209);

            Assert.AreEqual(10000019, Res);
        }
Exemplo n.º 9
0
        public void Prime9500049500063()
        {
            Res = PPollard.Factor(9500049500063);

            Assert.AreEqual(1000003, Res);
        }
Exemplo n.º 10
0
        public void Sqr49()
        {
            Res = PPollard.Factor(49);

            Assert.AreEqual(7, Res);
        }
Exemplo n.º 11
0
        public void Sqr18809569()
        {
            Res = PPollard.Factor(18809569);

            Assert.AreEqual(4337, Res);
        }
Exemplo n.º 12
0
        public void Sqr9()
        {
            Res = PPollard.Factor(9);

            Assert.AreEqual(3, Res);
        }
Exemplo n.º 13
0
        public void Sqr25()
        {
            Res = PPollard.Factor(25);

            Assert.AreEqual(5, Res);
        }
Exemplo n.º 14
0
        public void Prime2147484197()
        {
            Res = PPollard.Factor(2147484197);

            Assert.AreEqual(1, Res);
        }
Exemplo n.º 15
0
        public void Prime65699()
        {
            Res = PPollard.Factor(65699);

            Assert.AreEqual(1, Res);
        }
Exemplo n.º 16
0
        public void Prime4337()
        {
            Res = PPollard.Factor(4337);

            Assert.AreEqual(1, Res);
        }