<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
        主站蜘蛛池模板: 亚洲人成网站在线播放影院在线| 国产又大又黑又粗免费视频 | 午夜成年女人毛片免费观看| 亚洲视频在线观看网站| 亚欧日韩毛片在线看免费网站| 中国亚洲女人69内射少妇| 国产精品hd免费观看| 国产亚洲精品精品国产亚洲综合| 免费一级毛片在线播放视频免费观看永久| 日韩视频免费在线| 亚洲美国产亚洲AV| 免费在线观看理论片| 亚洲视频在线免费| 亚洲邪恶天堂影院在线观看| 999任你躁在线精品免费不卡| 亚洲美女在线观看播放| 无码国产精品一区二区免费式影视 | 国产精品亚洲片在线观看不卡| 国产久爱免费精品视频| 日韩va亚洲va欧洲va国产| 无码av免费一区二区三区试看| 久久久久亚洲av无码专区 | 国产精品无码一区二区三区免费| 亚洲av永久无码一区二区三区 | 国产免费午夜a无码v视频| 大片免费观看92在线视频线视频| 亚洲女同成人AⅤ人片在线观看| 中文字幕永久免费| 久久亚洲AV成人无码软件| 色播在线永久免费视频| 色老头综合免费视频| 亚洲av永久无码精品秋霞电影影院| 免费人成视频在线观看网站| 亚洲最大天堂无码精品区| 亚洲AV中文无码乱人伦在线视色 | 精品熟女少妇a∨免费久久| 亚洲熟妇无码av另类vr影视| 免费看男女下面日出水视频| 成人无遮挡裸免费视频在线观看 | 一个人免费观看www视频| 亚洲国产精品久久久久网站|