Example #1
0
        /// <summary>
        ///     Разложение на простые сомножетили по методу Ро-Полланда
        /// </summary>
        /// <param name="n"></param>
        /// <returns></returns>
        private BigInteger RhoPollard(BigInteger n)
        {
            BigInteger x = BigInteger.GenerateRandom(32);
            BigInteger y = 1;

            int i = 0;
            int stage = 2;

            while (n.GCD(x > y ? x - y : y - x) == 1)
            {
                if (i == stage)
                {
                    y = x;
                    stage = stage * 2;
                }
                x = (x * x + 1) % n;
                i = i + 1;
            }
            return n.GCD(x > y ? x - y : y - x);
        }