首先,2是公认最小的质数,所以,先把所有2的倍数去掉;然后剩下的那些大于2的数里面,最小的是3,所以3也是质数;然后把所有3的倍数都去掉,剩下的那些大于3的数里面,最小的是5,所以5也是质数…
上述过程不断重复,就可以把某个范围内的合数全都除去(就像被筛子筛掉一样),剩下的就是质数了。
时间复杂度O(nloglogn)
vector<int> res;
void fun(int n){
int i,j;
vector<int> v(n+1);
for(i=0;i<n+1;i++){
v[i]=1;
}
v[0]=0;
v[1]=0;
for(i=2;i<n+1;i++){
if(v[i]){
res.push_back(i);
for(j=2;i*j<=n;j++){
v[i*j]=0;
}
}
}
}
res中存储的即为[1,n]中所含的素数。