<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Python素數檢測的方法

        來源:懂視網 責編:小采 時間:2020-11-27 14:33:27
        文檔

        Python素數檢測的方法

        Python素數檢測的方法:本文實例講述了Python素數檢測的方法。分享給大家供大家參考。具體如下: 因子檢測: 檢測因子,時間復雜度O(n^(1/2)) def is_prime(n): if n 費馬小定理: 如果n是一個素數,a是小于n的任意正整數,那么a的n次方與a模n同余 實現方法: 選擇一個底
        推薦度:
        導讀Python素數檢測的方法:本文實例講述了Python素數檢測的方法。分享給大家供大家參考。具體如下: 因子檢測: 檢測因子,時間復雜度O(n^(1/2)) def is_prime(n): if n 費馬小定理: 如果n是一個素數,a是小于n的任意正整數,那么a的n次方與a模n同余 實現方法: 選擇一個底

        本文實例講述了Python素數檢測的方法。分享給大家供大家參考。具體如下:

        因子檢測:

        檢測因子,時間復雜度O(n^(1/2))

        def is_prime(n):
         if n < 2:
         return False
         for i in xrange(2, int(n**0.5+1)):
         if n%i == 0:
         return False
         return True

        費馬小定理:

        如果n是一個素數,a是小于n的任意正整數,那么a的n次方與a模n同余

        實現方法:

        選擇一個底數(例如2),對于大整數p,如果2^(p-1)與1不是模p同余數,則p一定不是素數;否則,則p很可能是一個素數
        2**(n-1)%n 不是一個容易計算的數字

        模運算規則:

        (a^b) % p = ((a % p)^b) % p
        (a * b) % p = (a % p * b % p) % p

        計算X^N(% P)

        可以
        如果N是偶數,那么X^N =(X*X)^[N/2];
        如果N是奇數,那么X^N = X*X^(N-1) = X *(X*X)^[N/2];

        def xn_mod_p(x, n, p):
         if n == 0:
         return 1
         res = xn_mod_p((x*x)%p, n>>1, p)
         if n&1 != 0:
         res = (res*x)%p
         return res

        也可以歸納為下面的算法 兩個函數是一樣的

        def xn_mod_p2(x, n, p):
         res = 1
         n_bin = bin(n)[2:]
         for i in range(0, len(n_bin)):
         res = res**2 % p
         if n_bin[i] == '1':
         res = res * x % p
         return res

        有了模冪運算快速處理就可以實現費馬檢測

        費馬測試當給出否定結論時,是準確的,但是肯定結論有可能是錯誤的,對于大整數的效率很高,并且誤判率隨著整數的增大而降低

        def fermat_test_prime(n):
         if n == 1:
         return False
         if n == 2:
         return True
         res = xn_mod_p(2, n-1, n)
         return res == 1

        MILLER-RABIN檢測

        Miller-Rabin檢測是目前應用比較廣泛的一種

        二次探測定理:如果p是一個素數,且0 費馬小定理:a^(p-1) ≡ 1(mod p)

        這就是Miller-Rabin素性測試的方法。不斷地提取指數n-1中的因子2,把n-1表示成d*2^r(其中d是一個奇數)。那么我們需要計算的東西就變成了a的d*2^r次方除以n的余數。于是,a^(d * 2^(r-1))要么等于1,要么等于n-1。如果a^(d * 2^(r-1))等于1,定理繼續適用于a^(d * 2^(r-2)),這樣不斷開方開下去,直到對于某個i滿足a^(d * 2^i) mod n = n-1或者最后指數中的2用完了得到的a^d mod n=1或n-1。這樣,Fermat小定理加強為如下形式:

        盡可能提取因子2,把n-1表示成d*2^r,如果n是一個素數,那么或者a^d mod n=1,或者存在某個i使得a^(d*2^i) mod n=n-1 ( 0<=i

        定理:若n是素數,a是小于n的正整數,則n對以a為基的Miller測試,結果為真.
        Miller測試進行k次,將合數當成素數處理的錯誤概率最多不會超過4^(-k)

        def miller_rabin_witness(a, p):
         if p == 1:
         return False
         if p == 2:
         return True
         #p-1 = u*2^t 求解 u, t
         n = p - 1
         t = int(math.floor(math.log(n, 2)))
         u = 1
         while t > 0:
         u = n / 2**t
         if n % 2**t == 0 and u % 2 == 1:
         break
         t = t - 1
         b1 = b2 = xn_mod_p2(a, u, p)
         for i in range(1, t + 1):
         b2 = b1**2 % p
         if b2 == 1 and b1 != 1 and b1 != (p - 1):
         return False
         b1 = b2
         if b1 != 1:
         return False
         return True
        def prime_test_miller_rabin(p, k):
         while k > 0:
         a = randint(1, p - 1)
         if not miller_rabin_witness(a, p):
         return False
         k = k - 1
         return True

        希望本文所述對大家的Python程序設計有所幫助。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Python素數檢測的方法

        Python素數檢測的方法:本文實例講述了Python素數檢測的方法。分享給大家供大家參考。具體如下: 因子檢測: 檢測因子,時間復雜度O(n^(1/2)) def is_prime(n): if n 費馬小定理: 如果n是一個素數,a是小于n的任意正整數,那么a的n次方與a模n同余 實現方法: 選擇一個底
        推薦度:
        標簽: 方法 檢查 python
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲成a人片在线观看日本麻豆| 毛片在线看免费版| 亚洲中文字幕久久精品无码APP | 免费看的一级毛片| 国产精品高清视亚洲精品| 四虎影视永久免费观看| 亚洲精华国产精华精华液| 国产成人免费片在线视频观看| 亚洲欧美日韩久久精品| 四虎影视在线永久免费观看| 免费人成动漫在线播放r18| 亚洲日韩国产精品乱| 国产一二三四区乱码免费| 亚洲国产精品嫩草影院在线观看| 成全高清在线观看免费| 亚洲系列国产精品制服丝袜第| 18勿入网站免费永久| 亚洲精品GV天堂无码男同| 国产v片免费播放| 男女一进一出抽搐免费视频| 亚洲妇熟XXXX妇色黄| 久久成人国产精品免费软件| 亚洲Av高清一区二区三区| 国产最新凸凹视频免费| 99视频免费在线观看| 亚洲美女激情视频| 免费网站看v片在线香蕉| 人妻仑乱A级毛片免费看| 久久精品亚洲一区二区| 永久免费av无码不卡在线观看| 国产大陆亚洲精品国产| 亚洲精品卡2卡3卡4卡5卡区| 最近中文字幕无免费| 在线观看亚洲视频| 亚洲AV无码成人精品区蜜桃| 黄+色+性+人免费| 全部在线播放免费毛片| 亚洲视频手机在线| 亚洲国产成人乱码精品女人久久久不卡| 中文字幕免费播放| 国产亚洲精品成人AA片|