PAT 乙級 1013 數素數
阿新 • • 發佈:2019-01-03
1013 數素數 (20 point(s))
令 Pi 表示第 i 個素數。現任給兩個正整數 M≤N≤104,請輸出 PM 到 PN 的所有素數。
輸入格式:
輸入在一行中給出 M 和 N,其間以空格分隔。
輸出格式:
輸出從 PM 到 PN 的所有素數,每 10 個數字佔 1 行,其間以空格分隔,但行末不得有多餘空格。
輸入樣例:
5 27
輸出樣例:
11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103
經驗總結:
這一題,肯定還是要用埃氏篩法的, 就是需要控制一下,當素數數量大於10000就終止就行了,就是空間要稍微開大一點(因為沒有測試第10000個素數到底有多大= =),然後再控制一下輸出一行頂多10個,如果小於10個最後一個數也不能有多餘的空格,就這些啦~╭( ̄▽ ̄)╯
AC程式碼
#include <cstdio> const int maxn=1000010; int prime[10010]; bool flag[maxn]={false}; int pnum=0; void find_prime(int n) { for(int i=2;i<maxn&&pnum<n;++i) { if(flag[i]==0) { prime[pnum++]=i; for(int j=i+i;j<maxn;j+=i) { flag[j]=1; } } } } int main() { int m,n; find_prime(10010); while(~scanf("%d %d",&m,&n)) { int count=1; for(int i=m;i<=n;++i) { if(count!=1&&count%10==0||i==n) printf("%d\n",prime[i-1]); else printf("%d ",prime[i-1]); ++count; } } return 0; }