素數篩的三種寫法

2021-10-03 02:30:26 字數 1047 閱讀 6329

思路:利用桶排序將範圍的數都先標記為1,然後通過計算素數的倍數把和數計算出來,然後將和數標記為0。

時間複雜度:n*lgn

優點:思路清晰,容易手寫。

缺點:是三種寫法裡最慢的一種。

#include 

using namespace std;

const int n=1e7+10;

int prime[n]

;//prime陣列儲存:素數

bool b[n]

;//b陣列用來標記哪些數字是素數,哪些是素數的倍數也就是和數;

void get_prime(

)}

思路:埃氏篩在素數篩的基礎上做了一些改進,減少了一些重複運算。

時間複雜度:n*lg(lgn)

優點:思路清晰,容易手寫。

缺點:不是最快的演算法,仍然包含了重複計算。

#include 

using namespace std;

const int n=1e7+10;

int prime[n]

;//prime陣列儲存:素數

bool b[n]

;//b陣列用來標記哪些數字是素數,哪些是素數的倍數也就是和數;

void get_prime()}

}

思路:從2開始篩,每次去除和數的時候,只去除到這個和數的最小素數時退出,剩下的和數由其他的素數去篩,一次只前進有限的個數並不是前進到最大值,因此可以不出現重複運算。

優點:最快的篩法。

缺點:不太容易記憶。

#include 

using namespace std;

const int n=1e7+10;

int prime[n]

;//prime陣列儲存:素數

bool b[n]

;//b陣列用來標記哪些數字是素數,哪些是素數的倍數也就是和數;

void get_prime()}

}int main(

)

get post put三種寫法

首先get請求寫法 ch curl init 請求位址 curl setopt ch,curlopt returntransfer,true 獲取資料返回 curl setopt ch,curlopt binarytransfer,true 在啟用 curlopt returntransfer 時候...

for迴圈的三種寫法

1 遍歷迴圈 for 迴圈變數型別 迴圈變數名稱 迴圈條件 更新語句 迴圈體 string arr for int i 0 i arr.length i 列印台abc d2 迭代器迴圈 string arr listlist arrays.aslist arr for iteratoriterato...

setInterval 的三種寫法

前言 setinterval fun time 有兩個引數 fun 為要執行的函式 time為多久執行一次函式,單位是毫秒 我們做乙個簡單的例子,就是每隔5s彈出乙個 hello 的對話方塊。先看第一種寫法,把方法體抽離出來,以字串的形式呼叫函式名,這種寫法呼叫函式名是不能傳參的 第二種寫法是把要執...