素数筛选

主要有两种一种是埃氏筛选法,一种是欧拉筛选法,欧拉筛选法是埃式筛选法的改进。

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

 

posted on 2017-04-06 14:34  mkfoy  阅读(149)  评论(0)    收藏  举报

导航