204. 计数质数
统计所有小于非负整数 n 的质数的数量。
优化后的时间复杂度O(N * loglogN)
class Solution {
//O(N * loglogN)
public int countPrimes(int n) {
boolean[] isPrim = new boolean[n];
// 将数组都初始化为 true
Arrays.fill(isPrim, true);
//如果在 [2,sqrt(n)] 这个区间之内没有发现可整除因子,就可以直接断定 n 是素数了,因为在区间 [sqrt(n),n] 也一定不会发现可整除因子。
for(int i = 2; i * i < n; i++) {
if(isPrim[i]) {
//优化: i 的倍数不可能是素数了
for(int j = i * i; j < n; j += i) {
isPrim[j] = false;
}
}
}
int count = 0;
for(int i = 2; i < n; i++) {
if(isPrim[i]) {
count++;
}
}
return count;
}
}