Esempio n. 1
0
            public bool IsPrime(PrimeType N, int accuracy)
            {
                var NMinus1 = N - 1;

                if ((NMinus1 % 6 != 0) && ((N + 1) % 6 != 0))
                {
                    return(false);
                }

                var factors   = Power2Factorizer.Factorize(NMinus1);
                var witnesses = WitnessProvider.GetRandomWitnesses(N, accuracy);

                for (var i = 0; i < accuracy; i++)
                {
                    var a = witnesses[i];
                    var x = BigInteger.ModPow(a, factors.d, N);
                    if (x == 1 || x == NMinus1)
                    {
                        continue;
                    }
                    for (var r = 1; r < factors.s; r++)
                    {
                        x = BigInteger.ModPow(x, 2, N);
                        if (x == NMinus1)
                        {
                            break;
                        }
                    }
                    if (x != NMinus1)
                    {
                        return(false);
                    }
                }
                return(true);
            }
Esempio n. 2
0
            public bool IsPrime(PrimeType N)
            {
                var factors   = Power2Factorizer.Factorize(N - 1);
                var witnesses = WitnessProvider.GetWitnesses(N);

                foreach (var a in witnesses)
                {
                    var rSet = Enumerable.Range(0, factors.s).ToList();
                    if (rSet.All(r =>
                                 BigInteger.ModPow(a, ((PrimeType)Math.Pow(2, r)) * factors.d, N) != N - 1 &&
                                 BigInteger.ModPow(a, factors.d, N) != 1))
                    {
                        return(false);
                    }
                }
                return(true);
            }