原题
Description:
Count the number of prime numbers less than a non-negative number, n.
分析
找到小于n的所有素数的个数。
没什么说的,如果迭代判断一个数是否是素数肯定是超时的复杂度
o(n2)
用埃拉托斯特尼筛选法
来解。
即先假定2~n所有的数都是素数,那么遍历之后,如果i是素数,那么i的2倍、3倍…就一定不是素数。
代码
class Solution {
public:
int countPrimes(int n) {
if(n<2)
return 0;
std::vector<bool>prime(n,true);
prime[0]=false;
prime[1]=false;
for(int i=2;i<n;++i)
{
if(prime[i])
{
for(int j=i*2;j<n;j+=i)
{
prime[j]=false;
}
}
}
return count(prime.begin(),prime.end(),true);
}
};