P3383 模板 線性篩素數 洛谷

2021-10-04 09:22:19 字數 881 閱讀 1451

題目描述

如題,給定乙個範圍 n,有 q 個詢問,每次輸出第 k 小的素數。

輸入格式

第一行包含兩個正整數 n,q,分別表示查詢的範圍和查詢的個數。

接下來 q 行每行乙個正整數 k,表示查詢第 k 小的素數。

輸出格式

輸出 q 行,每行乙個正整數表示答案。

輸入輸出樣例

輸入 #1 複製

100 512

345輸出 #1 複製23

5711說明/提示

【資料範圍】

對於100% 的資料,n = 10^8,1≤q≤10 ^6

,保證查詢的素數不大於 n。

data by nacly_fish.

這道題目需要用到尤拉篩法求素數,那麼尤拉篩法的原理是什麼呢?它用到了乙個結論:最小質因子*最大因子=合數,如果是埃氏篩法篩法的話,眾所周知,它的時間複雜度不是線性的,因為它在篩素數的時候有重複判斷的過程,例如3與2的公倍數有6,12,18,其實6,12,18這些公倍數在2的時候就已經判斷過了,所以在3的時候就沒必要再判斷,尤拉篩法就是避免了這些重複的判斷。如果是尤拉篩法的話,我們只利用它的最小質因子來篩,過程就是線性的,因為每個數字對應只判斷一次(相對應的意思是每個數的最小質因子只有乙個,所以只能判斷一次)。

**如下:

#include

bool is_prime[

100000008];

int num[

1000006];

int cur=1;

int n,p;

void

get_prime()

}}intmain()

return0;

}

洛谷 P3383 模板 線性篩素數

題目大意 如題,給定乙個範圍n,你需要處理m個某數字是否為質數的詢問 每個數字均在範圍1 n內 時空限制 500ms 128m 資料規模 對於30 的資料 n 10000,m 10000 對於100 的資料 n 10000000,m 100000 題解 數學方法 線性篩素數 很多人都是找到乙個素數,...

洛谷 P3383 模板 線性篩素數

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

洛谷 P3383 模板 線性篩素數

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