最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python高效的素數(shù)判斷算法

 更新時間:2021年04月07日 11:46:06   作者:木偶小佐  
這篇文章主要介紹了python高效的素數(shù)判斷算法,研究算法的同學一定要看一下

高效素數(shù)判斷算法

算法概述

此算法將其他博主對基本素數(shù)算法的一些改進進行了整合,其中主要整合了如下三條規(guī)則:

1.大于3的素數(shù)一定在6的倍數(shù)前一個或后一個(如素數(shù)37在36的后面)

2.要判斷n是否為素數(shù),只需要讓n從2開始,依次除到根號n即可

3.在進行“讓n從2開始,依次除到根號n”過程中,若n除以2的余數(shù)不為0,可以直接跳過[2, sqrt(n)]里面的所有偶數(shù)

博主語文素養(yǎng)不高,表達不是很準確,在后面會對這三條規(guī)則進行解釋。

規(guī)則詳解

1.大于3的素數(shù)一定在6的倍數(shù)前一個或后一個(如素數(shù)37在36的后面)

  • 數(shù)學證明:

任意一個整數(shù)n可以表示為n = 6a + b ( 0 <= b <= 5, a >= 0 ),接下來依次講當n等于0到5的情況,以對此結(jié)論進行證明:

當n = 6a + 0 = 6a時,n有一個不為1及其本身的因數(shù)(素數(shù)判斷條件)6,此類數(shù)不為素數(shù)

當n = 6a + 2 = 2( 3a + 1 )時,n有一個不為1及其本身的因數(shù)(素數(shù)判斷條件)2,此類數(shù)不為素數(shù)

當n = 6a + 3 = 3( 2a + 1 )時,同上,有一因數(shù)3,此類數(shù)也不為素數(shù)

當n = 6a + 4 = 2( 3a + 2 )時,有一因數(shù)2, 此類數(shù)也不為素數(shù)

而當n = 6a + 1 或 n = 6a + 5時,不能絕對確定n是否為素數(shù),需要考慮a的取值,顯然此時的數(shù)值n就是分布在6的倍數(shù)前一個或后一個

總結(jié):大于3的素數(shù)一定分布在6的倍數(shù)前后

  • 此規(guī)則可以直接對素數(shù)進行初步篩選,不符合此規(guī)則的數(shù)可直接判定為非素數(shù),直接減少了2/3的運算量,效率提高肉眼可見
  • 注意小于等于3的素數(shù)(2, 3)需要另外判斷

2.要判斷n是否為素數(shù),只需要讓n從2開始,依次除到根號n即可

最基本的素數(shù)判斷方法是:讓n從2開始除,依次除到n - 1,如果每次除出來的結(jié)果余數(shù)皆不為0,那么此數(shù)n即為素數(shù)
實際上并不需要從除以[2, n - 1]區(qū)間的所有整數(shù),只需除以[2, sqrt(n)]

3.在進行讓n除以[2, sqrt(n)]區(qū)間內(nèi)的所有整數(shù)操作時,如果2不是n的一個因數(shù),那么之后可以不判斷[2, sqrt(n)]區(qū)間的所有偶數(shù)

數(shù)學證明:當n/2除不盡時,n除以[2, sqrt(n)]區(qū)間內(nèi)的所有偶數(shù)都除不盡

因此如果n不能將2除盡,那么之后的偶數(shù)一樣除不盡,可以直接不除
如果將2除盡了,n就不是素數(shù),直接排除
如果沒有將2除盡,之后的計算量直接減半,肉眼可見的效率提升

算法時間復雜度復雜度

1.最基礎(chǔ)的算法:也就是讓n從2開始判斷,一直到n-1

若遇到的數(shù)是素數(shù)時,此時需要進行n-2次判斷
當遇到的不是素數(shù)時,要進行a(2<a<n-2)次判斷
也就是說時間復雜度為n

2.改進后的算法:

根據(jù)規(guī)則二,判斷素數(shù)只要從[2,sqrt(n)]即可,此時復雜度為sqrt(n)
根據(jù)規(guī)則3,無論如何都可以不判斷2之后的偶數(shù)(當n大于2,當n除盡2時,n不為素數(shù),之后不需要判斷,如果n除不盡2時,之后的偶數(shù)不要判斷)
假設(shè)n可以除盡2和不可以除盡2概率相等,那此時復雜度為sqrt(n)/4
根據(jù)規(guī)則一,只有1/3的數(shù)要進行判斷,此時復雜度為sqrt(n)/12
也就是說時間復雜度為sqrt(n)/12

在計算過程中做出的假設(shè)以及計算過程并不那么嚴謹,此結(jié)果僅供參考

Python代碼實現(xiàn)

def primeJudge(n):
 #先將數(shù)分為三類, 小于等于1,大于1小于5,和大于等于5
 #非整數(shù)統(tǒng)統(tǒng)不是素數(shù)
 if not isinstance(n, int): return False
 #小于1等于的都不是素數(shù)
 if n <= 1: return False
 #大于1小于5
 elif n == 2 or n == 3: return True
 #大于等于5
 elif n >= 5:
  #先判斷是否在6的附近
  if n % 6 == 5 or n % 6 == 1:
   #再判斷是否可以將2除盡
   #可以的話不是素數(shù)
   if n % 2 == 0: return False
   else:
    #不可除盡2,直接跳過所有偶數(shù)
    for i in range(3, int(sqrt(n) + 1), 2):
     if n % i == 0: return False
    #經(jīng)過篩選即為素數(shù)
    return True
  #不在6的附近不是素數(shù)
  else: return False

以上就是python高效的素數(shù)判斷算法的詳細內(nèi)容,更多關(guān)于python素數(shù)算法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python實現(xiàn)圖片橫向和縱向拼接

    python實現(xiàn)圖片橫向和縱向拼接

    這篇文章主要為大家詳細介紹了python實現(xiàn)圖片橫向和縱向拼接,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python + Flask 實現(xiàn)簡單的驗證碼系統(tǒng)

    Python + Flask 實現(xiàn)簡單的驗證碼系統(tǒng)

    這篇文章主要介紹了Python + Flask 制作一個簡單的驗證碼系統(tǒng),本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • Python3內(nèi)置json模塊編碼解碼方法詳解

    Python3內(nèi)置json模塊編碼解碼方法詳解

    Python3中我們利用內(nèi)置模塊json解碼和編碼JSON對象。json模塊提供了四個功能:dumps、dump、loads、load本文詳細講解了Python3內(nèi)置json模塊的詳細使用方法
    2021-10-10
  • django初始化數(shù)據(jù)庫的實例

    django初始化數(shù)據(jù)庫的實例

    今天小編就為大家分享一篇django初始化數(shù)據(jù)庫的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python使用PyMySql增刪改查Mysql數(shù)據(jù)庫的實現(xiàn)

    Python使用PyMySql增刪改查Mysql數(shù)據(jù)庫的實現(xiàn)

    PyMysql是Python中用于連接MySQL數(shù)據(jù)庫的一個第三方庫,本文主要介紹了Python使用PyMySql增刪改查Mysql數(shù)據(jù)庫的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • 4個的Python自動化腳本分享

    4個的Python自動化腳本分享

    這篇文章主要給大家分享了4個的Python自動化腳本,自動化腳本無需手動一次又一次地完成這些任務(wù),非常方便,下面我能就一起進入文章來來了解實現(xiàn)吧,希望對你有所幫助
    2021-12-12
  • Python五種下劃線詳解

    Python五種下劃線詳解

    這篇文章主要介紹了Python下劃線5種含義實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-10-10
  • Python 操作mysql數(shù)據(jù)庫查詢之fetchone(), fetchmany(), fetchall()用法示例

    Python 操作mysql數(shù)據(jù)庫查詢之fetchone(), fetchmany(), fetchall()用法示例

    這篇文章主要介紹了Python 操作mysql數(shù)據(jù)庫查詢之fetchone(), fetchmany(), fetchall()用法,結(jié)合實例形式分析了Python使用pymysql模塊的fetchone(), fetchmany(), fetchall()方法進行mysql數(shù)據(jù)庫查詢的操作技巧,需要的朋友可以參考下
    2019-10-10
  • 基于 Django 的手機管理系統(tǒng)實現(xiàn)過程詳解

    基于 Django 的手機管理系統(tǒng)實現(xiàn)過程詳解

    這篇文章主要介紹了基于 Django 的手機管理系統(tǒng)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 基于Pytorch實現(xiàn)的聲音分類實例代碼

    基于Pytorch實現(xiàn)的聲音分類實例代碼

    聲音分類是音頻深度學習中應用最廣泛的方法之一,下面這篇文章主要給大家介紹了如何基于Pytorch實現(xiàn)聲音分類的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06

最新評論

新泰市| 永川市| 茂名市| 清徐县| 东方市| 固原市| 那曲县| 三穗县| 达州市| 蕲春县| 江源县| 普定县| 华池县| 南雄市| 桦南县| 时尚| 丁青县| 东明县| 鄂伦春自治旗| 达州市| 张掖市| 永春县| 吴忠市| 盈江县| 南开区| 柳林县| 深圳市| 高要市| 来宾市| 镇雄县| 安岳县| 通山县| 张北县| 镶黄旗| 石屏县| 县级市| 芦溪县| 灌南县| 盈江县| 麻阳| 铅山县|