任务:
编写一个程序,以查找3
和2^63-1
之间的所有梅森素数。
我应该使用很长时间,并且程序应打印2的所有幂减1,并说明数字是否为Mersenne Prime。我还需要测量运行该程序需要多长时间。谢谢。
我已经达到2^31-1
的水平,但是之后该程序一直运行了很长时间,然后最终关闭了。另外,我目前只打印出梅森素数,它不会告诉我它们不是素数。
代码:
public class Mersenne_Primes {
public static void main(String[] args) {
System.out.println("p\t2^p - 1");
for (int number = 2; number <= 63; number++) {
if (isPrime(number)) {
long mersennePrime = (long)(Math.pow(2, number)) - 1;
if (isPrime(mersennePrime)) {
System.out.print(number + "\t" + mersennePrime + "\n");
}
}
}
}
public static boolean isPrime(long number) {
if ((number == 1) || (number == 2)) {
return true;
}
for (long i = 2; i <= number/2; i++) {
if (number % i == 0) {
System.out.print("Not a prime number");
}
}
return true;
}
}
我希望能看到梅森素数的完整列表,但是它会跳过很多数字以及输出时的内容:
“这不是素数”
它不断地反复运行。我知道这与它的放置和循环有关,但我不知道那是什么原因。任何帮助将不胜感激。