您的位置:首页 > 其它

素数筛选

2017-04-06 14:34 190 查看
主要有两种一种是埃氏筛选法,一种是欧拉筛选法,欧拉筛选法是埃式筛选法的改进。

#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: