质数打表相关
求<=K的所有质数
#include<cstdio> #include<queue> #include<stack> #include<algorithm> #include<cstring> #include<string> #include<vector> #include<iostream> #include<map> using namespace std; const int MAXN=1e7+10; int prime[MAXN]; bool isprime[MAXN]; int main() { int K; cin>>K; for(int i=0;i<=K;i++)isprime[i]=true; isprime[0]=isprime[1]=false; int prime_cnt=0; for(int i=2;i<=K;i++) { if(isprime[i]) { prime[++prime_cnt]=i; for(int j=2*i;j<=K;j+=i)isprime[j]=false; } } for(int i=1;i<=prime_cnt;i++)cout<<prime[i]<<endl; return 0; }
然而这只是埃氏筛法,更快的是欧拉筛法。
memset(isprime,true,sizeof(isprime)); isprime[0]=isprime[1]=false; int prime_cnt=0; for(int i=2;i<MAXN;i++) { if(isprime[i]) { prime[++prime_cnt]=i; //for(int j=2*i;j<=MAXN;j+=i)isprime[j]=false; } for(int j=1;j<=prime_cnt&&i*prime[j]<MAXN;j++) { isprime[i*prime[j]]=false; if(i%prime[j]==0)break; } } //for(int i=1;i<=100;i++)cout<<prime[i]<<endl; //return 0;