题目大意:给出一个非负数n,统计出小于n的素数的个数。
算法思想:
1.设置一个规模为n的素数表,可以稍微大些,初始化为0。
2.遍历素数表将那些非素数及其倍数从素数表中去除。
3.统计素数表中素数。
代码如下:
class Solution {
public:
int countPrimes(int n) {
int* notPrime=new int[n+5];
memset(notPrime,0,sizeof(int)*(n+5));
for (int i = 2; i*i <= n;++i){
if (!notPrime[i])
{
for (int j = i*i; j <= n;j+=i){
notPrime[j] = 1;
}
}
}
int num = 0;
for (int i = 2; i < n;i++){
if (!notPrime[i]) ++num;
}
delete[]notPrime;
return num;
}
};