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的元素的下标在控制台输出。
*/