从2开始遍历2到1000000的所有整数,若当前整数没有因为它是某个小于其的素数的倍数而被标记为非素数,则判定其为素数,并标记它所有的倍数为非素数。然后继续遍历下一个数,直到遍历完2到1000000内的所有整数。此时,所有未被标记成非素数的数即为要求的素数。
const int MAXN=10001;
vector<int> prime; //保存质数
bool isPrime[MAXN]; //标记数组
void Initial(){ //初始化
for(int i=0;i<MAXN;i++)
{
isPrime[i]=true;
}
isPrime[0]=false;
isPrime[1]=false;
for(int i=2;i<MAXN;i++)
{
if(!isPrime[i]) //非质数跳过
continue;
prime.push_back(i);
for(int j=i*i;j<MAXN;j+=i) //质数的倍数为非质数
{
isPrime[j]=false;
}
}
return ;
}