欧拉筛法求素数的时间复杂度已经达到了O(n),是线性的很优秀的算法。
有关具体算法的详解请参考我的下一篇博客。----> 欧拉线性筛法求素数(顺便实现欧拉函数的求值)
下面附上代码:
class Solution {
public:
int countPrimes(int n) {
int cnt=0;
memset(vis,0,sizeof(vis));
for(int i=2;i<n;i++)
{
if(!vis[i])
prime[cnt++]=i,num[i]=1;
for(int j=0;j<cnt&&i*prime[j]<n;j++)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0)
break;
}
}
return cnt;
}
};