JAVA打印300以內的質數

JAVA打印300以內的質數

package JAVA_Project_01_04;//創建一個包
//具體做法是:先把N個自然數按次序排列起來。1不是質數也不是合數,要劃去。第二個數2是質數留下來,
//而把2後面的所有能被2整除的數都劃去。2後面第一個沒被劃去的數是3,把3留下
//再把3後面所有能被3整除的數都劃去。3後面第一個沒被劃去的是5,再把5後面所有能被5整除的數都劃去。
//這樣一直下去,就會把不超過N的全部荷屬都帥選掉,留下的就是不超過N的全部質數
import java.util.Arrays;//導入類

public class TextPrimeNumber {//操作求指定範圍內的質數的類

    private static boolean[] filterNumber(int num) {//帥選法求質數
        if (num <= 0) {//判斷指定的範圍
            System.out.println("範圍必須大於0");
            return null;
        }

        boolean[] isPrime = new boolean[num + 1];//聲明布爾類型數組,長度爲範圍+1
        //數組標註是否爲質數,下標值爲質數,那麼對應數組元素值爲true
        //例如2是質數,isPrime[2]=true
        isPrime[1] = false;//1不是質數
        Arrays.fill(isPrime, 2, num + 1, true);//將布爾數組元素的值爲true
        int n = (int) Math.sqrt(num);//Math.sqrt方法用於求開方
        for (int i = 1; i < n; i++) {
            if (isPrime[i]) {//如果是質數,那麼i的倍數不是質數
                for (int j = 2 * i; j <= num; j += i) {
                    isPrime[j] = false;
                }
            }
        }
        return isPrime;
    }
    public static void showAppointArea(int number){//顯示指定範圍內的質數
        boolean[] primes= filterNumber(number);//調用方法賦值給布爾類型的數組
        int num=0;
        if (primes!=null){
            for (int i=1;i<primes.length;i++){//循環數組操作數組的元素
                if (primes[i]){//如果數組元素值爲true,則下標值爲質數
                    System.out.println(i+"");//輸出質數
                    if (++num%10==0)//每輸出10個質數換行
                        System.out.println();
                }
            }
            System.out.println();
        }
        System.out.println("一共有"+num+"個");
    }

    public static void main(String[] args) {//Java程序主入口處
        int number=300;//聲明範圍
        System.out.println("範圍在"+number+"內的質數有:");
        showAppointArea(number);//調用方法顯示質數
    }
}
/*(1)filter Number()方法使用帥選法求傳入參數值範圍內的所有的質數。聲明一個布爾類型的數組,
數組元素值爲true時,表示該元素的下標爲質數。如果number是一個質數,那麼number的位數都不是質數,
利用Array.fill()方法初始化布爾類型數組,然後利用循環將數組下標爲number的倍數的元素值設置爲false。
這樣就能判斷那部分元素是質數了
(2)showAppointArea()方法調用FilterNumber()方法,得到布爾類型數組,將值爲true的元素的下標在控制檯輸出。
 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章