洛谷_P3383 【模板】线性筛素数
题目描述
如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内)
输入输出格式
输入格式:
第一行包含两个正整数N、M,分别表示查询的范围和查询的个数。
接下来M行每行包含一个不小于1且不大于N的整数,即询问该数是否为质数。
输出格式:
输出包含M行,每行为Yes或No,即依次为每一个询问的结果。
代码
1 var
2 n,m,nm:longint;
3 v,prime:array [0..10000001] of longint;
4 procedure try1;
5 var
6 i,j:longint;
7 begin
8 nm:=0;
9 v[1]:=1;
10 for i:=2 to 10000000 do
11 begin
12 if v[i]=0 then
13 begin
14 inc(nm);
15 prime[nm]:=i;
16 end;
17 j:=1;
18 while (j<=nm) and (i*prime[j]<=10000000) do
19 begin
20 v[i*prime[j]]:=1;
21 if i mod prime[j]=0 then break;
22 inc(j);
23 end;
24 end;
25 end;
26
27 procedure init;
28 var
29 i,x:longint;
30 begin
31 readln(n,m);
32 for i:=1 to m do
33 begin
34 readln(x);
35 if v[x]=0 then writeln('Yes')
36 else writeln('No');
37 end;
38 end;
39
40 begin
41 try1;
42 init;
43 end.