Java:不确定是否正确使用BigInteger

时间:2017-08-24 12:46:20

标签: java math project biginteger

这个程序用于计算n下素数的总和x,但我的代码似乎不起作用,它编译并且没有错误。当我运行它时,控制台只是空白

public static void main(String[] args) {

    Prime prime = new Prime();
    BigInteger answer = BigInteger.valueOf(0);
    for (int i = 2; i < 2000000; i++) {
        if (prime.isPrime(i)) {
            answer = answer.add(BigInteger.valueOf(i));

        }
    }

    System.out.println(answer);
}

isPrime方法

  boolean isPrime(int n) {
    for(int i = 2; i < n ; i++) {
        if(n % i == 0) {
            return false;
        }
    }
    return true;
}

2 个答案:

答案 0 :(得分:1)

你只是等不了多久。

尝试使用i < 200,您会很快看到答案4227

您正在检查2,000,000数字的素数。您的isPrime方法为O(n),因此您正在进行大约2,000,000 * 1,000,000次计算。你解决了。

答案 1 :(得分:1)

为什么不使用isProbablePrime()课程中的BigInteger方法,无论如何使用它?

for (int i = 2; i < 2000000; i++) {
        if (new BigInteger(Integer.toString(i)).isProbablePrime(10)) {
            answer = answer.add(BigInteger.valueOf(i));

        }
}

此代码仅在4秒左右运行。

但是如果你想用你的方法做,你应该优化它。在sqrt(n)

之前检查除数是必要的
for(int i = 3; i * i <= n ; i+= 2) {
    if(n % i == 0) {
        return false;
    }
}

或者您可以使用Sieve of Eratosthenes解决问题