【模板】线性筛

luogu judger time:1105ms

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<queue>
 6 #define rep(i,a,n) for(int i = a;i <= n;i++)
 7 #define per(i,n,a) for(int i = n;i >= a;i--)
 8 #define inf 2147483647
 9 #define ms(a,b) memset(a,b,sizeof(a))
10 using namespace std;
11 typedef long long ll;
12 ll read() {
13     ll as = 0,fu = 1;
14     char c = getchar();
15     while(c < '0' || c > '9') {
16         if(c == '-') fu = -1;
17         c = getchar();
18     } 
19     while(c >= '0' && c <= '9') {
20         as = as * 10 + c - '0';
21         c = getchar();
22     }
23     return as * fu;
24 }
25 const int N = 10000005;
26 //head
27 int n,top;
28 int mindiv[N],prim[670005];
29 void initprim() {
30     rep(i,2,n) {
31         if(mindiv[i] == 0) prim[++top] = i;
32         for(int j = 1;j <= top && i * prim[j] <= n;j++) {
33             mindiv[i * prim[j]] = prim[j];
34             if(i % prim[j] == 0) break; 
35         }
36     }
37     return; 
38 }
39 
40 int main() {
41     n = read();
42     initprim();
43 //    rep(i,1,top) printf("%d ",prim[i]);
44     mindiv[0] = mindiv[1] = 1;
45     int T = read();
46     while(T--) {
47         int w = read();
48         mindiv[w] ? puts("No") : puts("Yes");
49     }
50     return 0;
51 }

 

posted @ 2018-10-03 22:26  白怀潇  阅读(128)  评论(0)    收藏  举报