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的元素的下標在控制檯輸出。
*/