思路
参考题解中的埃氏筛方法。
public int countPrimes(int n) {
int[] isPrime = new int[n]; // 最多是n个质数
Arrays.fill(isPrime, 1);
int ans = 0;
for (int i = 2; i < n; ++i) {
if (isPrime[i] == 1) { // 1表示是质数
ans += 1;
if ((long) i * i < n) {
for (int j = i * i; j < n; j += i) { // 标记所有的倍数为合数
isPrime[j] = 0;
}
}
}
}
return ans;
}