線性篩素數
阿新 • • 發佈:2018-06-06
span tro col -m std 正整數 \n str bre
題目描述
如題,給定一個範圍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 #include<cstdio> 2 #include<cmath> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int n,m,i,j,check[10000005] = {0},sushu[10000005],tot = 0,k; 7 int main() 8 { 9 check[1] = 1; 10scanf("%d %d",&n,&m); 11 for(i = 2;i <= n;i++) 12 { 13 if(check[i] == 0) 14 { 15 sushu[tot] = i; 16 tot= tot + 1; 17 } 18 for(j = 0;j < tot;j++) 19 { 20 if(i * sushu[j] > n) 21 { 22 break; 23 } 24 check[i * sushu[j]] = 1; 25 if(i % sushu[j] == 0) 26 { 27 break; 28 } 29 } 30 } 31 for(i = 1;i <= m;i++) 32 { 33 scanf("%d",&k); 34 if(check[k] == 0) 35 printf("Yes\n"); 36 else 37 printf("No\n"); 38 } 39 return 0; 40 }
線性篩素數