时间复杂度:O(nlognlogn),对于程序设计竞赛中的数据规模,看作线性也无妨
代码:
int prime[maxn];//第i个素数
bool is_prime[maxn+1];//is_prime[i]为true表示i是素数
//返回n以内素数的个数
int sieve(int n){
int p=0;
for(int i=0;i<=n;i++)
is_prime[i]=true;
is_prime[0]=is_prime[1]=false;
for(int i=2;i<=n;i++){
if(is_prime[i]){
prime[p++]=i;
for(int j=2*i;j<=n;j++i) is+prime[j]=false;
}
}
return p;
}