hz2016評測《《點擊跳轉 caioj《《點擊跳轉 線性篩選,什麼名詞,聽不同,通俗就是減少後面搜索狀態而已嘛。 具體還是看註釋吧,就是On求素數。
#include<map> #include<queue> #include<cmath> #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define Maxprime 15485863 #define Maxm 1000000 #define Maxn 50 #define mes(x,y) memset(x,y,sizeof(x)); #define mpy(x,y) memcpy(x,y,sizeof(x)) #define INF 2147483647 using namespace std; int n,prime[Maxm+1]; bool v[Maxprime+1]; void get_prime(int maxx){ memset(v,true,sizeof(v)); prime[0]=0; for(int i=2;i<=maxx;i++){ if(v[i]==true){//如果我不是有多個因子的 prime[++prime[0]]=i;//加多一個素數 } for(int j=1;(j<=prime[0])&&(i*prime[j]<=maxx);j++){//吧所有是這個數的倍數的數全部設爲false,就是代表我有多個因子,多個因子就不是素數 v[i*prime[j]]=false; if(i%prime[j]==0)break;//後面的還沒有求過,所以不可以提前調用,直接break } } } int main(){ scanf("%d",&n); get_prime(Maxprime);//下面的很簡單 for(int i=1;i<=n;i++){ int x; scanf("%d",&x); printf("%d\n",prime[x]); } return 0; }
查看原文:http://hz2016.tk/blog/?p=34