素數運算 生成素數的方法

2021-09-28 13:53:51 字數 885 閱讀 1736

方法一:

計算整數區間[2,n]中所有素數的最為簡便的篩法——埃氏篩法

設u為篩子,初始區間中的所有數在篩子u中。按遞增順序搜尋u中的最小數,將其倍數從u中篩去,最終留下的數即為素數。

int i,j,k;

for(i=

2;i<=n;i++

) u[i]

=true;

//初始時所有數都在篩中

for(i=

2;i<=n;i++

)//順序搜尋篩中的最小數

if(u[i]

)for

(i=2

;i<=n;i++

)//將篩中的所有素數放入su中

if(u[i]

) su[

++num]

=i;

上述演算法的時間複雜度為o(n *log log n)。演算法中合數是作為素數的倍數被篩去的。

方法二:

尤拉篩法

int i,j,num=1;

memset

(u,true,

sizeof

(u))

;for

(i=2

;i<=n;i++

)}

尤拉篩法的時間複雜度可優化至o(n);

練習題目:

1.poj 2262,zoj 1951,uva 543

2.uva 10168

3.poj 3518,uva 3883

python利用filter生成素數

計算素數的乙個方法是埃氏篩法,它的演算法理解起來非常簡單 首先,列出從2開始的所有自然數,構造乙個序列 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,取序列的第乙個數2,它一定是素數,然後用2把序列的2的倍數篩掉 3,4,5,6,7,8,9,10,...

利用線性篩法生成素數表

一.問題背景 對任意整數i 2,n 指出i為質數還是合數。其中輸入整數n滿足2 n 1e6.二.解決方案 1.樸素演算法 試除法 判斷x是否為素數,則列舉i 2,x 1 如果不存在i能整除x,則x為素數。顯然,列舉量可以縮小至 2,sqrt x 時間複雜度 o n 1.5 對於n 1e6,運算量達十...

判斷素數的方法(孿生素數)

素數 質數prime number 定義為在大於1的自然數中,除了1和它本身以外不再有其他因數,素數有無窮多個。先來一張 2 200素數分布表 從2到 n整除判斷 public static boolean isprime int num for int i 2 i sqrt num i retur...