2016-07-29 25 views
4

我的代碼有什麼問題?編寫一個程序,將所有素數從1增加到100

預計輸出= 1060

我1000素數之和檢查。它會顯示正確 輸出3682913

public class PrimeNumber { 

     public static void main(String args[]){ 

      int number = 2; 
      int count = 0; 
      long sum = 0; 
      while(count <100){ 
       if(isPrimeNumber(number)){ 
        sum += number; 
        count++; 
       } 
       number++; 
      } 
      System.out.println(sum); 
     } 

     private static boolean isPrimeNumber(int number){ 

      for(int i=2; i<=number/2; i++){ 
       if(number % i == 0){ 
        return false; 
       } 
      } 
      return true; 
     } 
    } 
+11

我想你發現第100黃金數字,而不是1到100之間的素數。 – JETM

+0

您正在查找前100個素數,而非1-100素數。改變while while(number <100) – bpgeck

+0

作爲一個附註,你可以在'i <= Math.sqrt(i)'處停止'for'循環,儘管在進入循環之前你應該計算一次。 – bradimus

回答

1

目前,你指望第100個素數,而不是在1的範圍內發現的素數 - 100,您可以在這裏完全失去了計數變量。

你的代碼可以simplifed因爲如此,使用for循環,而不是去從2到100(1不包括,當然)...

public class PrimeNumber { 
    public static void main(String args[]) { 
     long sum = 0; 
     for (int number = 2; number <= 100; number++) { 
      if (isPrimeNumber(number)) { 
       sum += number; 
      } 
     } 

     System.out.println(sum); 
    } 

    private static boolean isPrimeNumber(int number){ 
     for (int i = 2; i <= number/2; i++) { 
      if (number % i == 0) { 
       return false; 
      } 
     } 

     return true; 
    } 
} 
+0

當比較for循環while循環更快 – Ramasamy

+0

@Ramasamy該斷言的任何證據?無論是一段時間還是一個for循環,它都會遍歷所有數字。並且要求確保我們必須通過從2到100的每個數字。for循環是爲此設計的。如果它可以更早結束,那麼while循環會更好,但不能早於100分鐘結束。 – ManoDestra

+1

你對!!很好 – Ramasamy

5

你數到100素數,但達不到100號

所以你的while循環應該運行多達100個數字。

這應該是你的主要方法:

int number = 2; 
     int count = 0; 
     long sum = 0; 
     while(number <= 100){ 
      if(isPrimeNumber(number)){ 
       sum += number; 
       count++; 
      } 
      number++; 
     } 
     System.out.println(sum); 
    } 

這將使您的輸出。

+0

有人被低估了。你能解釋爲什麼嗎? –

+0

沒有downvote,但它看起來像你的答案只是人們已經評論。看起來像你剛剛複製它們。 – bpgeck

1

您可以使用下面給出的代碼來找到1到100之間的第一個素數之和。它會給你正確的輸出。

public class PrimeNumber { 
    public static void main(String args[]){ 
     int number = 2; 
     int sum = 0; 
     while(number <= 100){ 
      if(isPrimeNumber(number)){ 
       sum += number; 
      } 
      number++; 
     } 
     System.out.println(sum); 
    } 

    private static boolean isPrimeNumber(int number){ 
     int sqrt = (int) Math.floor(Math.sqrt(number)); 
     for(int i = 2; i <= sqrt; i++){ 
      if(number % i == 0){ 
       return false; 
      } 
     } 
     return true; 
    } 
} 
+0

他並不是在尋找前100個素數的總和,而是小於100的素數。我沒有下降。 –

+0

這就是我所做的。你再檢查一次。 – VatsalSura

+0

但看到你的解釋:「找到前100個素數的總和」 –

相關問題