埃拉託斯特尼篩法,是一種西元前250年由古希臘數學家埃拉託斯特尼所提出的一種簡單檢定素數的演算法。
給出要篩數值的範圍n,找出以內的素數。先用2去篩,即把2留下,把2的倍數剔除掉;再用下乙個質數,也就是3篩,把3留下,把3的倍數剔除掉;接下去用下乙個質數5篩,把5留下,把5的倍數剔除掉;不斷重複下去......。
篩法素數時間複雜度o(log log n),基本接近線性,測試一億
個資料2.48秒
下面是比較優化的c++語言**
const int maxn = 102410240;
bool isp[maxn];
void init()
下面是更好的,速度更快的線性篩法測試十億個資料1.23秒:
const int maxn = 102410240;
bool check[maxn] = ;
int pri[maxn], tot;
void init()
}}
素數篩法打表
篩法打素數表是一種高效的打表方法,具體做法是 先把n個自然數按次序排列起來。1不是質數,也不是合數,要划去。第二個數2是質數留下來,而把2後面所有能被2整除的數都劃去。2後面第乙個沒劃去的數是3,把3留下,再把3後面所有能被3整除的數都劃去。3後面第乙個沒劃去的數是5,把5留下,再把5後面所有能被5...
素數打表 篩法
打表 是一種典型的用空間換時間的做法,一般指將所有可能需要用到的結果事先計算出來,這樣以後後面需要用到時就可以直接查表獲得。在什麼情況下我們需要打表?1 在程式中一次性計算出所有需要用到的結果,之後查詢直接取這些結果。舉個例子,假如我們算fibonacci數中的f n 我們假如需要算很多次q次 比如...
ACM 素數線性篩法(素數打表)
題目 include include int prime 700000 bool check 10000000 int num 1 int judge int y int j 0 while p j 1 j j i 0 while i j i j return1 int main int j 1 f...