要点:
- 能被1或本身整除的数是素数。
- 1不是素数。
import java.util.Arrays;
import java.util.Scanner;
public class FindPrimeNumber {
private static boolean[] primeNumber(int num) {//求质数
if(num<=0) {
System.out.println("请输入大于0的数!");
return null;
}
boolean[] primes = new boolean[num+1];//声明bool数组,长度为num,加1是为了使数组元素的值和下标值相等
primes[1] = false;//特殊数字1不是素数,筛除掉设为false
Arrays.fill(primes, 2, num+1, true);//将数组元素除了下标为1的值以外,都赋为ture
int n=(int)Math.sqrt(num);//Math.sqrt用于求平方根
for(int i=1; i<n; i++) {
if(primes[i]) {//如果是素数,那么i的倍数不是素数
for(int j=2*i; j<=num; j+=i) {
primes[j]=false;
}
}
}
return primes;
}
public static void showPrimeNumber(int num) {//显示素数
boolean [] primes=primeNumber(num);
int n = 0;
if(primes!=null) {
for(int i=1; i<primes.length; i++) {
if(primes[i]) {
System.out.print(i+" ");
if(++n%20==0) {//输出20个之后换行
System.out.println();
}
}
}
System.out.println();
}
System.out.println("一共有"+n+"个素数");
}
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);//从键盘输入随机数num的范围
System.out.println("请输入求素数的范围:");
int num= sc.nextInt();
System.out.println("范围在"+num+"以内的素数有:");
showPrimeNumber(num);
}
}