编写程序以查找3到2 ^ 63-1

时间:2019-01-23 00:49:25

标签: java

任务:

编写一个程序,以查找32^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;
    }
}

我希望能看到梅森素数的完整列表,但是它会跳过很多数字以及输出时的内容:

  

“这不是素数”

它不断地反复运行。我知道这与它的放置和循环有关,但我不知道那是什么原因。任何帮助将不胜感激。

0 个答案:

没有答案