项目Euler#10 Java解决方案无法正常工作

Den*_*s S 3 java math primes

我试图找到素数<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)

Mar*_*ers 7

结果太大而无法放入整数,因此会出现溢出.尝试使用BigIntegerlong.在这种情况下,长就足够了.

  • 长会比BigInteger更好[更快].它显然足够大,因为1 + 2 + 3 + ... + 2000000 = 2000001000000小于长的最大值. (3认同)

Poi*_*nty 6

你将那些只能被平方根整除的数字(如25)视为素数.而不是i < Math.sqrt(nr)尝试i <= Math.sqrt(nr).

顺便说一句,这是找到素数的一种非常低效的方法.

  • 他**不是**循环到平方根!他使用的比较是`<`not` <=`. (5认同)