素數判斷(Python 版)

# 判斷 candidate 是否是素數
def IsPrime(candidate):
    if ((candidate&1)==0):  # 是偶數,除了2,其他偶數全部不是質數
        return candidate==2
    limit=int(math.sqrt(candidate))

    print('limint',limit)
    for i in range(3,limit+1,2):
        if candidate%i==0:
            return False
    return True


 

判斷是否是偶數
十進制     0     1     2       3          4          5         6....
二級制     0     1     10    11        100       101     110....

奇數的二進制數:1結尾
偶數的二進制數:0結尾

所以與1 &運算 ,如果奇數爲1,如果爲偶數爲0

素數:
2^2            3^2               4^2                 5^2                 
3,5,7,     9,11,13,15,     17,19,21,23,     25,27,29,31

素數定義:一個數只能被1和本身整除
所以偶數除2外都不是素數
例如:判斷21是否是素數:
21?3*7
21?5*x     # 注意x不能是偶數,那麼被判斷數就是偶數。那就在最頂端截獲了。
21?7*3
21?9*x
21?11*x
21?13*x
21?17*x
21?19*x
21?21*1

這是完整的判斷
大家看到從7*3後,其他運算要麼不能可能,要麼21*1必定成立。7*3以後的運算可以省去。
大家在看7*3與3*7是對稱,也是冗餘運算。我們能不能找到這個對稱結構的中點,只需判斷一半即可判定是否是素數。
兩個數相乘,轉折點在相乘兩數相當,即:5*5.所以我們只需判斷(不包含)
21?3*7
即可完整判斷是否爲素數。

算法性能大大提高。所以我們用limit=int(math.sqrt(candidate)),對所要判斷數開平發,來獲取上限。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章