1. 程式人生 > >P3383 【模板】線性篩素數

P3383 【模板】線性篩素數

... 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 int
p; 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 【模板】線性篩素數