判断某数是否为质数
新思路:借助boolean数组
- 0和1不是质数
- 如果x是质数,那么x的n倍肯定不是质数,即2x, 3x, 4*x…不是质数
- boolean数组默认true,从i=2开始,对i的倍数从i倍开始,置为false
public static boolean isPrimer(int n) {
boolean[] countPrime = new boolean[n+1];
Arrays.fill(countPrime, true);//1. 先默认都是质数
countPrime[0] = false; countPrime[1] = false;//2. 0-1不是质数
//3. 如果x是质数,那么2x, 3x, 4x...不是质数
/*后面的数都默认是质数,从2,3,5,7...开始依次将它们的倍数排除,总能将所有数字遍历过一遍*/
for(int i = 2; i <= n; i++) {
if(countPrime[i] && i*i <= n) {
/*j从i*i开始,因为前面的已经访问过了*/
for(int j = i*i; j <= n; j +=i) {//i的倍数所以每次j+i
countPrime[j] = false;
}
}
}
return countPrime[n];
}//isPrimer