篩法求素數

2021-07-30 22:08:47 字數 470 閱讀 5645

素數篩法就是每次把已知的素數的倍數曬去,篩掉前sqrt(n)中素數的倍數就可以了;

先把n個自然數按次序排列起來。1不是質數,也不是合數,要划去。第二個數2是質數留下來,而把2後面所有能被2整除的數都劃去。2後面第乙個沒劃去的數是3,把3留下,再把3後面所有能被3整除的數都劃去。3後面第乙個沒劃去的數是5,把5留下,再把5後面所有能被5整除的數都劃去。這樣一直做下去,就會把不超過n的全部合數都篩掉,留下的就是不超過n的全部質數。

/******** 

** 素數篩法

*********/

#include #include #define n 100001

bool prime[n];

void removeeven()//去掉偶數

}void geteven()

}int main()

return 0;

}

篩法求素數 線性篩法求素數

2021年更新版 篩法求素數 線性篩法求素數 要理解篩法求素數首先要知道乙個定理,整數唯一分解定理 任意大於等於2的正整數都有且只有一種方式寫出其質因子的乘積表示式。a p1p2p3p4 pn pi是素數且pi pj eg 2 2 4 22 12 223 36 2233 也就是說任意乙個合數都能分成...

素數篩法求素數

素數篩類似於打表標記,預先處理掉非素數的數,即素數的倍數 任意非素數都可以由幾個素數相乘得到 於是效率比暴力求解快得多。埃氏篩法的效率為o n loglog n 簡單易懂,但是會重複標記,比如當i為2時,6會被標記掉,然而當i為3時,6又會被重複標記,這樣的重複訪問加大了時間複雜度,於是有了尤拉篩。...

篩法求素數

假設要求n以內的素數 篩法求素數是用乙個大小為n的陣列,作為標記陣列,如果沒被標記到則為素數。開始均為未標記。從2開始,2沒被標記,將2存入乙個存素數的地方,然後篩掉小於n的,2的所有倍數。然後是3,篩掉3的所有倍數,依此類推,直到n 1。上面的做法,同乙個數可能會被篩掉多次,比如6會被3和2各篩一...