1、题目描述
给定整数 n
,返回 所有小于非负整数 n
的质数的数量 。
2、算法分析
这个方法记住即可,这是一个古老的筛素数的方法。
初始化长度 O(n)O(n) 的标记数组,表示这个数组是否为质数。数组初始化所有的数都是质数.
从 2 开始将当前数字的倍数全都标记为合数。标记到 \sqrt{n} ,n 时停止即可。
3、代码实现
class Solution {
public int countPrimes(int n) {
boolean[] isPrime = new boolean[n];
Arrays.fill(isPrime,true);
for(int i = 2;i*i < n;i++){
// 如果是质数,那么它的倍数都不是质数
if(isPrime[i]){
// 遍历倍数
for(int j = i * i;j < n;j += i){
isPrime[j] = false;
}
}
}
int count = 0;
for(int i = 2;i < n;i++){
if(isPrime[i]){
count++;
}
}
return count;
}
}