P3383 模板 線性篩素數

2021-08-24 18:13:39 字數 1170 閱讀 8209

線性篩素數

如題,給定乙個範圍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和它本身,沒有數能整除它(時間複雜度不優秀)

記錄以n以內的數為因數,用它們相乘得出的積必定為合數,那麼沒被記錄的就是質數了(記憶體不優秀,但時間優於1)

使用尤拉篩數(本人技術懶水平不足,沒寫。如果想看,請轉到這裡)

因為本題資料比較水,故筆者採用第二種

var

n,m,x,i,j:longint;

a:array[1..10000000]of boolean;

begin

read(n,m);

for i:=2

to n do

ifnot(a[i]) then

begin

for j:=i to n div i do

a[i*j]:=true;

end;

a[1]:=true;

for i:=1

to m do

begin

read(x);

if a[x] then writeln('no')

else writeln('yes');

end;

end.

P3383 模板 線性篩素數

如題,給定乙個範圍n,你需要處理m個某數字是否為質數的詢問 每個數字均在範圍1 n內 輸入格式 第一行包含兩個正整數n m,分別表示查詢的範圍和查詢的個數。接下來m行每行包含乙個不小於1且不大於n的整數,即詢問概數是否為質數。輸出格式 輸出包含m行,每行為yes或no,即依次為每乙個詢問的結果。輸入...

P3383 模板 線性篩素數

題目鏈結 題目描述 如題,給定乙個範圍n,你需要處理m個某數字是否為質數的詢問 每個數字均在範圍1 n內 輸入格式 第一行包含兩個正整數n m,分別表示查詢的範圍和查詢的個數。接下來m行每行包含乙個不小於1且不大於n的整數,即詢問該數是否為質數。輸出格式 輸出包含m行,每行為yes或no,即依次為每...

P3383 模板 線性篩素數

如題,給定乙個範圍n,你需要處理m個某數字是否為質數的詢問 每個數字均在範圍1 n內 輸入格式 第一行包含兩個正整數n m,分別表示查詢的範圍和查詢的個數。接下來m行每行包含乙個不小於1且不大於n的整數,即詢問概數是否為質數。輸出格式 輸出包含m行,每行為yes或no,即依次為每乙個詢問的結果。輸入...