線性篩素數
如題,給定乙個範圍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,即依次為每乙個詢問的結果。輸入...