原理:先将范围内的质数排好,然后进行筛选,1先剔除,2是质数保存,2的倍数、3的倍数等通通剔除。
以下是源码:
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];//数组标注是否为质数,下标值为质数,那么对应数组元素值为true
isPrime[1]=false;
Arrays.fill(isPrime, 2,num+1,true);//将布尔数组元素的值都赋为true
int n=(int)Math.sqrt(num);//求开方
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]){
System.out.print(i+" ");
if(++num%10==0)
System.out.println();
}
System.out.println();
}
System.out.println("一共有"+num+"个");
}
public static void main(String[] args) {
int number=200;
System.out.println("范围在"+number+"内的质数有:");
showAppointArea(number);
}
}