主要有两种一种是埃氏筛选法,一种是欧拉筛选法,欧拉筛选法是埃式筛选法的改进。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN=1000;
bool isPrime[MAXN];
int Prime[MAXN];
int PriN;
//埃式筛选法
void solve(int N){
PriN=0;
memset(isPrime,true,sizeof(isPrime));
isPrime[0]=isPrime[1]=false;
for(int i=2;i<=N;i++){
if(isPrime[i]){
Prime[PriN++]=i;
for(int j=i*i;j<=N;j+=i)
isPrime[j]=false;
}
}
}
//欧拉筛选法
void Eular(int N){
PriN=0;
memset(isPrime,true,sizeof(isPrime));
isPrime[0]=isPrime[1]=false;
for(int i=2;i<=N;i++){
if(isPrime[i])
Prime[PriN++]=i;
for(int j=0;j<PriN;j++){
if(i*Prime[j]>N) break;
isPrime[i*Prime[j]]=0;
if(i*Prime[j]==0)
break;
}
}
}
int main(){
int N=100;
solve(N);
for(int i=0;i<PriN;i++)
cout<<Prime[i]<<" ";
cout<<endl;
cout<<"-----------------------------------------"<<endl;
Eular(N);
for(int i=0;i<PriN;i++)
cout<<Prime[i]<<" ";
cout<<endl;
}