2013-03-18 95 views
-2

我試圖解決這個代碼,但真的我不能。..我沒有任何結果...如果somembody可以幫助,此代碼工作,但沒有結果! :質數與總和和三個循環

public class Primenumber { 

    public static void main(String[] args) { 
     int n = 10000; 
     long sum = 0; 
     loop: 
     for (int i = 2; i <= n; i++) { 
      for (int j = 2; j < n; j++) { 
       for (int k = j; k < n; k++) { 
        if (i == j * k) { 
         continue loop; 
        } 
       } 
      } 
      sum += i; 
     } 
     System.out.println("該整數之內的所有素數之和是:" + sum); 
    } 
} 
+2

「解決此問題」是什麼意思?代碼看起來是正確的,你想知道它做了什麼嗎? – 2013-03-18 14:18:08

+2

你的問題是什麼? – 2013-03-18 14:18:26

+0

編譯程序後沒有結果,應該有結果。 – Johan 2013-03-18 14:39:47

回答

0

此代碼循環約n^3迭代(少一點)。難怪當你通過一個大的n時它不會走到盡頭。

可以 「使工作」 通過改變

n = 10000; 

n = 1000; 

那麼結果是

該整數之內的所有素數之和是:76127 

總之你的代碼似乎好工作,你只必須爲大n尋找更高效的算法。

+0

結果應該是10000以下的所有素數的總和,而不是1000,我的錯誤是什麼? – Johan 2013-03-18 14:32:22

+0

它的工作原理,對於大的n值來說太慢了。 – 2013-03-18 14:36:02

+0

謝謝,它工作正常 – Johan 2013-03-18 14:51:21

2

沒有進入先進的篩算法細節:

  • 你只需要找到除數低於或等於比sqrt(i)。 (如果一個整數j>sqrt(i)i,存在另一個整數k<sqrt(i)也分i
  • 可以丟棄(即不檢查)甚至其他除數是2(如果偶數分i,然後2i,並且您已經在之前測試過)
  • 您可以丟棄您知道不是素數的因數(例如,您發現素數爲i的較早值)。如果一個整數j除以i,或者j是素數,或者j=p*m(其中p是素數,並且p除以i)。
  • 內循環是不需要的(你正在用商的蠻力搜索取代一個分區)。相反,檢查是否i%j==0(即如果i的餘數除以j爲零)。