Monday Aug 14, 2006
Monday Aug 14, 2006
import java.math.*;
public class Mersenne {
static final BigInteger one = new BigInteger("1");
static final BigInteger two = new BigInteger("2");
static final BigInteger four = new BigInteger("4");
private static boolean LucasLehmerTest(int p) {
BigInteger s = four;
BigInteger n = one.shiftLeft(p).subtract(one);
for (int i = 3; i <= p; i++) {
s = s.multiply(s).subtract(two).mod(n);
}
if (s.bitCount() == 0) {
return true;
} else {
return false;
}
}
public static void main(String[] args) {
for (int i = 0; i < 5000; i++) {
if (LucasLehmerTest(i)) {
System.out.println("2^" + i + "-1 is prime");
}
}
}
}
Ant the output will look like:2^3-1 is prime 2^5-1 is prime 2^7-1 is prime 2^13-1 is prime 2^17-1 is prime 2^19-1 is prime 2^31-1 is prime 2^61-1 is prime 2^89-1 is prime 2^107-1 is prime 2^127-1 is prime 2^521-1 is prime 2^607-1 is prime 2^1279-1 is prime 2^2203-1 is prime 2^2281-1 is prime 2^3217-1 is prime 2^4253-1 is prime 2^4423-1 is prime