埃拉托斯特尼筛法,简称埃氏筛或爱氏筛,是一种由埃及数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。
基于C++实现的埃拉托斯特尼筛法如下:
//********埃拉托斯特尼筛法
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
int getnextprime(vector<bool>&flags,int prime)
{
int next=prime+1;
while(next<flags.size() && flags[next]==false)
next++;
return next;
}
void crossoff(vector<bool>&flags,int prime)
{
for(int i=prime*prime;i<flags.size();i+=prime)
flags[i]=false;
}
int main()
{
vector<bool>flags;
int max;
cin>>max;
flags.assign(max+1,true);
int prime=2;
while(prime<=max)
{
crossoff(flags,prime);
prime=getnextprime(flags,prime);
if(prime>=max)
break;
}
for(int i=2;i<=max;i++)
cout<<flags[i]<<" ";
cout<<endl;
return 0;
}