2014-09-28 51 views
-3

我試圖寫一些代碼,在最大數量,並給了我2和最大數量之間的所有素數。它幾乎可以工作,但是我遇到了打印所有素數的問題,但它也打印出相同質數的結果相乘。例如,它將打印2,3,4,5,7,9,它們都是0到10之間的所有素數,但它也會打印額外的數字,即2 * 2,3 * 3等等。請指導我正確的方向,以便我可以完成這個程序。尋找素數的Java

public class PrimeNumbers 
{ 
    public static void main(String[] args) 
    { 
     int max = 400; 

     //Runs through all the numbers between 2 and max, checks if 
     //the number is prime and prints it 
     for(int num = 2; num < max; ++num) 
     { 
      if(isPrimeNumber(num)) 
      { 
       System.out.println(num); 
      } 
     } 
    } 

    //method to find all prime numbers 
    public static boolean isPrimeNumber(int number) 
    { 
     for(int mod = 2; mod < Math.sqrt(number); ++mod) 
     { 
      if(number % mod == 0) 
      { 
       return false; 
      } 
     } 

     return true; 
    } 
} 
+5

4不是素數,9不是質... – Alboz 2014-09-28 19:07:12

+0

即使編譯器可能會內聯'Math.sqrt'調用,我建議你自己做。 – Dici 2014-09-28 19:13:46

+0

我知道這一點,這就是爲什麼我說它打印所有素數加上一些不是素數的額外數字。 – ed1234567 2014-09-28 19:46:21

回答

5

你的結束條件是錯誤的,你需要走了一路sqrt(num)

for (int mod = 2; mod <= Math.sqrt(number); ++mod) 
+0

這個問題是問爲什麼「主要」數字打印後(2 * 2等),你的答案沒有解決這個問題 – 2014-09-28 19:10:33

+2

它確實解決它,OP的方法只是平方數錯誤,這就是爲什麼他得到' true'爲4和9. – Dici 2014-09-28 19:12:04

+0

是的,這絕對解決了我的問題,仍然不知道爲什麼,但它現在正常工作 – ed1234567 2014-09-28 19:51:54