top

找尋前10個質數

本帖最後由 archervr 於 2015-7-30 17:49 編輯

最近小弟拿Java書想自行練功
練習到要找質數問題,可是功力不夠
一直找不到自己程式哪裡出問題
有沒有前輩可以幫小弟解惑?


程式碼:
package pjL1.cls1;
import java.util.*;
public class search_prime {

        public static void main(String[] args) {
        boolean J;
        int count=0,number=2;
        int n = 10;
        
        while (count<=n){
                J=true;
            for(int divisor=1;divisor<=number/2;divisor++){
                    if(number%divisor==0 && divisor!=1 ){
                            J=false;
                            
                    }
            if(J==true){
                    System.out.println(number);
                    count+=1;
                       }
            number+=1;
               
        }
        }
        
   

        }

}


輸出結果:
2
3
5
9
17
33
65
129
257
513
1025

  1. public class SearchPrime {
  2.     public static void main(String[] args) {
  3.         for (int number = 2, count = 0; count <= 10; number++) {
  4.             if (isPrime(number)) {
  5.                 System.out.println(number);
  6.                 count++;
  7.             }
  8.         }
  9.     }

  10.     private static boolean isPrime(int number) {
  11.         for (int divisor = 2; divisor <= number / 2; divisor++) {
  12.             if (number % divisor == 0) {
  13.                 return false;
  14.             }
  15.         }
  16.         return true;
  17.     }
  18. }
複製程式碼

TOP

非常感謝你,前輩
你的程式有很成功輸出質數。
可是可以請教你一下我自己的程式的問題是出在哪裡嗎?
我想知道自己的盲點在哪裡,不然以後還是會犯一樣的錯。
還是真的寫得很爛,要全部打掉重練......

謝謝指教!!

TOP

我的程式就是拿你的來改而已,至於你原有的程式,只要將:
  1.             if (J == true) {
  2.                 System.out.println(number);
  3.                 count += 1;
  4.             }
  5.             number += 1;
複製程式碼
放到 for 迴圈外就可以了:
  1. import java.util.*;

  2. public class search_prime {

  3.     public static void main(String[] args) {
  4.         boolean J;
  5.         int count = 0, number = 2;
  6.         int n = 10;

  7.         while (count <= n) {
  8.             J = true;
  9.             for (int divisor = 1; divisor <= number / 2; divisor++) {
  10.                 if (number % divisor == 0 && divisor != 1) {
  11.                     J = false;
  12.                 }
  13.             }
  14.             // 從 for 內拿到外面
  15.             if (J == true) {
  16.                 System.out.println(number);
  17.                 count += 1;
  18.             }
  19.             number += 1;
  20.         }

  21.     }
  22. }
複製程式碼

TOP

原來如此!!!!我找到了
感謝指教!!!!......Orz

TOP