Python判斷乙個正整數是否為素數的演算法

2021-10-03 10:41:01 字數 1412 閱讀 9351

先定義乙個有序列表,作為素數池,這樣多次操作的時候可以直接用裡面的素數作為取模的除數,以避免用冗餘的合數來運算和重複性的運算:

primepool = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,79,83,89,97,101,103,107,109,113]
定義素數判斷函式

def isprime(num):

if num in primepool:

return true

sq = math.sqrt(num)

p=2for m in primepool: #先從素數池中找

p = m

if math.fmod(num,m)==0:

print('divider:',m)

return false

if p > sq:

return true

p = p+2

while p<=sq:

if isprime(p):

if math.fmod(num,p)==0:

print('divider:',p)

return false

p = p+2 #以2為步長,避免無用的偶數判斷

'''如果此時的 num 是素數,暫時不將其放入有序素數池中,因為還要判斷並新增從p到num之間的所有素數。對於本函式而言是個較大的計算量。

'''return true

執行示例:

isprime(17947)
結果:

divider: 5                # p==115時,p被5整除

divider: 3 # p==117時,p被3整除

divider: 7 # p==119時,p被7整除

divider: 11 # p==121時,p被11整除

divider: 3 # p==123時,p被3整除

divider: 5 # p==125時,p被5整除

divider: 3 # p==127時,向素數池中新增127;然後判斷p==129時,被3整除

divider: 131 # p==131時,向素數池中新增131;

false # num被131整除

時間複雜度估算為:

它與素數的密度分布有關。而且隨著素數池primepool的逐漸積累,函式的效率也會顯著提公升。

整數的素因數權重分析

判斷乙個正整數是否素數

素數指的是只能被1和自身整除的大於1的整數 對於每個數num,並不需要從2判斷到num 1,這樣效率很低。假若乙個數可以進行因式分解,那麼分解得到的兩個數必將有乙個小於等於sqrt num 另乙個大於等於sqrt num 所以,我們只要遍歷sqrt num 即可,因為在sqrt num 左側找不到約...

使用Python判斷乙個正整數數是否為素數

判定乙個數是否為素數的基本思路 1 了解素數的定義,乙個正整數n若為素數,則它的約數只能是1和n本身,2 根據定義,我們需要將這個數除以從2到n 1之間的全部正整數,如果全部都不能整除,則這個數便是素數。若是其中有乙個數能被整除,則這個數是個合數,而不是素數。因此,用求餘演算法 不失為一種有效的方法...

PHP判斷乙個變數是否為整數 正整數的方法示例

在php中判斷乙個變數是否為整數 在寫php 的時候遇到這樣乙個小問題 如何判斷乙個變數是否為整數,於是在網上找到了兩個方法來解決,在此做乙個小小的記錄。方法1 num 12.1 返回false if is int num else 這裡用is int程式設計客棧 方法來判斷傳入的引數是否為整數形 ...