public BigInteger GenerateNumber(int length) { RNGCryptoServiceProvider createNum = new RNGCryptoServiceProvider(); byte[] number = new byte[length]; createNum.GetBytes(number); BigInteger numToRet = new BigInteger(number); return numToRet; } public bool isPrime(BigInteger N, int iterations) { BigInteger r = new BigInteger((N - 1).ToByteArray()); BigInteger a; BigInteger y; byte[] number = N.ToByteArray(); if (N == 2 || N == 3) return true; if (N % 2 == 0) return false; while (r % 2 == 0) { r = r / 2; } for (int i = 0; i < iterations; i++) { do { a = GenerateNumber(number.Length); } while (a < 2 || a > N - 2); y = BigInteger.ModPow(a, r, N); BigInteger temp = r; while (temp != N - 1 && y != 1 && y != N - 1) { y = BigInteger.ModPow(y, 2, N); temp = BigInteger.Multiply(temp,2); } if (y != N - 1 && BigInteger.ModPow(temp,1,2) == 0) return false; } return true; }
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)