日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

miller_rabin 证明与实现

發布時間:2023/12/4 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 miller_rabin 证明与实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

143. 質數判定__模板題鏈接

前置知識

費馬小定理:ppp是質數,則對于任意的aaaaaappp互質,則有ap?1≡1(modp)a ^ {p - 1} \equiv 1 \pmod {p}ap?11(modp)

二次探測定理:如果ppp是一個質數,x2≡1(modp)x ^ 2 \equiv 1 \pmod px21(modp),則有解為x1=1,x2=p?1x_1 = 1, x_2 = p - 1x1?=1,x2?=p?1,推理如下

?x2?1≡0(modp)\Rightarrow x ^ 2 - 1 \equiv 0 \pmod p?x2?10(modp)

?p∣x2?1\Rightarrow p \mid x ^ 2 - 1?px2?1

?p∣(x?1)(x+1)\Rightarrow p \mid (x - 1)(x + 1)?p(x?1)(x+1)

?x1=1,x2=p?1\Rightarrow x_1 = 1, x_2 = p - 1?x1?=1,x2?=p?1

同樣的我們即可反證:如果x2≡1(modp)x ^ 2 \equiv 1 \pmod {p}x21(modp),并且x!=1,x!=n?1x != 1 , x != n-1x!=1x!=n?1,那么我們一定可以認定ppp不是質數。

miller_radin的實現

對于一個質數ppp,我們顯然可以得到p?1=2sdp - 1 = 2 ^ s dp?1=2sd的形式,ddd是奇數。

我們在[2,n)[2,n)[2,n)中隨機選取一個數aaa,顯然有ap?1=a2sd=((((ad)2)……)2)a ^ {p - 1} = a ^ {2 ^ s d} = ((((a ^ d) ^ 2 )^ {……}) ^ 2)ap?1=a2sd=((((ad)2))2)

所以我們可以從ada ^ dad開始,做sss次二次探測,如果二次探測失敗,我們直接得到這個數不止質數,當二次探測完成時,我們再做一次費馬小定理的特判,判斷該數是不是質數。

miller_rabin 模板代碼

ll quick_mult(ll a, ll b, ll mod) {ll ans = 0;while(b) {if(b & 1) ans = (ans + a) % mod;a = (a + a) % mod;b >>= 1;}return ans; }ll quick_pow(ll a, ll n, ll mod) {ll ans = 1;while(n) {if(n & 1) ans = quick_mult(ans, a, mod);a = quick_mult(a, a, mod);n >>= 1;} return ans; }bool miller_rabin(ll n) {if(n == 2) return true;if(n < 2 || !(n & 1)) return false;ll s = 0, d = n - 1;while(!(d & 1)) {d >>= 1;s++;}srand(time(0));for(int i = 1; i <= 5; i++) {ll a = rand() % (n - 2) + 2;ll now = quick_pow(a, d, n), pre = now;for(int j = 1; j <= s; j++) {now = quick_mult(now, now, n);if(now == 1 && pre != 1 && pre != n - 1) return false;pre = now;}if(now != 1) return false;}return true; }

總結

以上是生活随笔為你收集整理的miller_rabin 证明与实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。