题目:
利用素数筛法求出2到10000内的所有素数。
素数筛法:找到一个素数,就将它的所有倍数均标记为非素数;当遍历到一个数时,若它未被任何小于它的素数标记为非素数,则确定其为素数。
步骤如下:从2开始遍历2到10000的所有整数,若当前整数没有因为它是某个小于其的素数的倍数而被标记为非素数,则判定其为素数,并标记它所有的倍数是非素数。然后继续遍历下一个数。遍历完后,所有未被标记成非素数的数是素数。
代码:
vector<int> prime;//保存质数
bool isPrime[10001];//标记数组
void Initial()
{
for(int i=0;i<10001;i++)
{
isPrime[i]=true;
}
isPrime[0]=false;
isPrime[1]=false;
for(int i=2;i<10001;i++)
{
if(!isPrime[i])//非质数则跳过
continue;
prime.push_back(i);
for(int j=i*i;j<10001;j+=i)
isPrime[j]=false;//质数的倍数为非质数
}
return ;
}