【发布时间】:2011-03-03 23:52:46
【问题描述】:
我试图找到
打印“sum”给出:1308111344,这是不正确的。
编辑: 感谢所有的帮助。将 int 更改为 long 并将
/*
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();
}
}
【问题讨论】:
-
作为提示,我会将 Math.sqrt(nr) 放在 for 条件之外,因此不会在每个循环中每次都对我进行评估,例如:stop = Math.sqrt(nr) (也可以使用 ceil,以避免浮点舍入错误) for(int i = 3; i