1. 计数质数
线性筛法 O(n)
class Solution {
public:
int countPrimes(int n) {
int primes[n + 1];// primes[]存储所有素数
bool st[n + 1];// st[x] 存储x是否被筛掉 st[x] = false; 表示x是素数
memset(primes, 0, sizeof primes);
memset(st, 0, sizeof st);
int cnt = 0;
for (int i = 2; i < n; i ++ )
{
if (!st[i]) primes[cnt ++ ] = i;
//遍历当前所有的素数
for (int j = 0; primes[j] <= n / i; j ++ )
{
st[i * primes[j]] = true; //x = i * primes[j]
if (i % primes[j] == 0) break;
}
}
return cnt;
}
};