这是我的 BigInts 素数检查器:
private static Boolean isSpsp(BigInteger n, BigInteger a)
{
BigInteger two = BigInteger.valueOf(2);
BigInteger n1 = n.subtract(BigInteger.ONE);
BigInteger d = n1;
int s = 0;
while (d.mod(two).equals(BigInteger.ZERO))
{
d = d.divide(two);
s += 1;
}
BigInteger t = a.modPow(d, n);
if (t.equals(BigInteger.ONE) || t.equals(n1))
{
return true;
}
while (--s > 0)
{
t = t.multiply(t).mod(n);
if (t.equals(n1))
{
return true;
}
}
return false;
}
public static Boolean isPrime(BigInteger n)
{
Random r = new Random();
BigInteger two = BigInteger.valueOf(2);
BigInteger n3 = n.subtract(BigInteger.valueOf(3));
BigInteger a;
int k = 25;
if (n.compareTo(two) < 0)
{
return false;
}
if (n.mod(two).equals(BigInteger.ZERO))
{
return n.equals(two);
}
while (k > 0)
{
a = new BigInteger(n.bitLength(), r).add(two);
while (a.compareTo(n) >= 0)
{
a = new BigInteger(n.bitLength(), r).add(two);
}
if (! isSpsp(n, a))
{
return false;
}
k -= 1;
}
return true;
}
您可以在我的“使用质数编程”文章中阅读更多相关信息。