我试图找到素数<2,000,000的总和.这是我在Java中的解决方案,但我似乎无法得到正确的答案.请对可能出现的问题提供一些意见,并对代码的一般建议表示赞赏.
打印'sum'给出:1308111344,这是不正确的.
编辑:感谢您的帮助.将int更改为long和<to <=并且它完美无缺,除了是找到素数的低效方法:)
/*
The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
Find the sum of all the primes below two million.
*/
class Helper{
public void run(){
Integer sum = 0;
for(int i = 2; i < 2000000; i++){
if(isPrime(i))
sum += i;
}
System.out.println(sum);
}
private boolean isPrime(int nr){
if(nr == 2)
return true;
else if(nr == 1)
return false;
if(nr % 2 == 0)
return false;
for(int i = 3; i < Math.sqrt(nr); i += 2){
if(nr % i == 0)
return false;
}
return true;
}
}
class Problem{
public static void main(String[] args){
Helper p = new Helper();
p.run();
}
}
Run Code Online (Sandbox Code Playgroud)
结果太大而无法放入整数,因此会出现溢出.尝试使用BigInteger或long.在这种情况下,长就足够了.
你将那些只能被平方根整除的数字(如25)视为素数.而不是i < Math.sqrt(nr)尝试i <= Math.sqrt(nr).
顺便说一句,这是找到素数的一种非常低效的方法.