P3383 【模板】線性篩素數
阿新 • • 發佈:2017-05-10
... right else cst pre left 數據 ret col
題目描述
如題,給定一個範圍N,你需要處理M個某數字是否為質數的詢問(每個數字均在範圍1-N內)
輸入輸出格式
輸入格式:第一行包含兩個正整數N、M,分別表示查詢的範圍和查詢的個數。
接下來M行每行包含一個不小於1且不大於N的整數,即詢問概數是否為質數。
輸出格式:輸出包含M行,每行為Yes或No,即依次為每一個詢問的結果。
輸入輸出樣例
輸入樣例#1:100 5 2 3 4 91 97輸出樣例#1:
Yes Yes No No Yes
說明
時空限制:500ms 128M
數據規模:
對於30%的數據:N<=10000,M<=10000
對於100%的數據:N<=10000000,M<=100000
樣例說明:
N=100,說明接下來的詢問數均不大於100且大於1。
所以2、3、97為質數,4、91非質數。
故依次輸出Yes、Yes、No、No、Yes。
數據中居然有1.......
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 const int MAXN=10000001; 7 int vis[MAXN]; 8 int main() 9 { 10 int n,q; 11 scanf("%d%d",&n,&q); 12 for(int i=2;i<sqrt(n);i++) 13 { 14 if(vis[i]==0) 15 for(int j=i*i;j<=n;j=j+i) 16 vis[j]=1; 17 } 18 for(int i=1;i<=q;i++) 19 { 20 intp; 21 scanf("%d",&p); 22 if(vis[p]==1||p==1)printf("No\n"); 23 else printf("Yes\n"); 24 } 25 return 0; 26 }
P3383 【模板】線性篩素數