2013-07-30 53 views
-2

我試圖解決這個問題並編寫代碼,但它不起作用。我試着用斷點它似乎工作,但它不..我哪裏出錯了?歐拉在Java中的第10個解決方案

第10個歐拉問題: 10以下的素數之和是2 + 3 + 5 + 7 = 17。 找到所有素數低於200萬的總和。

我的Java代碼:

public class Problem_010 { 

public static void main(String[] args) { 

    long sum = 0; 
    boolean control = false; 

     for (int i = 3; i < 2000000; i+=2) { 
      control = true; 
      for (int j = 2; j < i; j++) { 

       if ((i % j) == 0) { 
        control = false; 
        break; 
       } 
      } 
      if (control == true) { 
       sum = sum + i;     
      } 
     } 

    System.out.println("Sum: " + (sum+2)); 
} 

} 
+6

你是什麼意思「不正常」? – arshajii

+0

你得到任何錯誤或錯誤的輸出?讓問題變得明確 – exexzian

+3

你會很快發現人們不會善意地模糊「這只是行不通的,爲我弄明白!」的問題。 – SMT

回答

4

你的代碼將工作,這將只是需要很長的時間。爲了找到素數,你可以採取更好的方法;看看sieve of Atkin ,一種常用於查找小於某個整數的素數的算法。


阿特金的篩是sieve of Eratosthenes的優化版本。正如@丹尼斯蒙指出的那樣,後者也應該足夠快並且可能會更容易編碼。

+0

難道'Eratosthenes的篩子'會更快嗎? – radimpe

+0

@radimpe Atkin的篩網是其優化版本。 – arshajii

+3

雖然Eratosthenes的篩子更容易編碼,但足夠快。 –

5

答案是正確的,如果你運行足夠長的時間,它只是非常低效。試試這個。

public static void main(String... ignored) { 
    long sum = 2; 
    for (int i = 3; i < 2000000; i += 2) { 
     if (isPrime(i)) 
      sum += i; 
    } 

    System.out.println("Sum: " + sum); 
} 

private static boolean isPrime(int i) { 
    for (int j = 3; j * j <= i; j += 2) { 
     if (i % j == 0) 
      return false; 
    } 
    return true; 
} 
相關問題