这个程序用于计算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;
}
答案 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解决问题