2013-02-28 46 views
-2

我在超過20分鐘獲得輸出越來越ANS是有什麼辦法可以減少時間出去趕緊把歐拉problem10不輸出

public class Problem10 { 
public static void main(String[] args) { 
long temp =0; 
int n=2000000; 
for(long i=2; i<n; i++){ 
System.out.println((i)); 
    boolean isprime = true; 
    for(long j=2; j<i; j++){ 
     if(i%j==0){ 
     isprime =false;  
      break; 
      } 
     } 

    if(isprime) 
    {temp +=i; 

    } 

    } 
    System.out.println(temp); 

} 

} 
+0

考慮到代碼中涉及的計算量,它將花費大量時間。你可能更願意在你的'if(isprime)'條件下打印語句來查看整體進度。 – Achrome 2013-02-28 06:13:17

+2

你什麼都沒有,或者你還在等待答案?我認爲這個問題是關於如何有效地測試素數。你可以看看那個。另外要小心,總和不會溢出變量temp,它只是一個'int'。 – 2013-02-28 06:14:27

回答

0

變化溫度的數據類型和int長它會工作

3

如果我計算你的程序的複雜程度大致是BigO(n*n)。在這裏,如果n的值是2000000那麼迭代將需要2000000 * 2000000來完成整個任務。

這是大量的時間。我建議你在你的循環中放入println,這會提醒你它仍在運行。 :)

1

您的數據類型太小而無法保存該值,因此請將其更改爲或BigInteger類型以進行優化,您可以將其正確的邏輯更改爲其他邏輯。請參閱項目euler站點