首先,如何判断一个数是否为素数呢,首先我们知道最小的素数是2,那么我们从2开始判断该数是否能找到被除数即可,完整代码如下:
public boolean isPrimeNum(int i){
if(i<2) return false;
if(i==2) return true;
for(int j = 2;j<=Math.sqrt(i)+1;j++){
if(i%j == 0) return false;
}
return true;
}
204. 计数质数
思路:统计所有小于非负整数 n 的质数的数量。
那么这一题我们需要对每个小于n的数进行判断一次吗?这种方法当然是可以,但是效率太低,这里我们介绍一种简单的方法,叫做 厄拉多塞筛法, 比如说求20以内质数的个数,首先0,1不是质数,2是第一个质数,然后把20以内所有2的倍数划去,2后面紧跟的数即为下一个质数3,然后把3所有的倍数划去,3后面紧跟的数即为下一个质数5,再把5所有的倍数划去,以此类推,剩下的就是质数啦(✿◕‿◕✿)。
public int countPrimes(int n) {
boolean[] isPrime = new boolean[n];
int count = 0;
for (int i = 2; i < n; i++) {
if (isPrime[i] == false) {
count++;
for (int j = i + i; j < n; j += i) {
isPrime[j] = true;
}
}
}
return count;
}