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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

各种逆元推导

發布時間:2023/12/4 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 各种逆元推导 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

逆元

求解一(費馬小定理)

ppp是一個質數,并且a%p=?0a \% p \not= 0a%p?=0,則有ap?1≡1(modp)a ^ {p - 1} \equiv 1 \pmod pap?11(modp)ap?2≡a?1a ^ {p - 2} \equiv a ^ {-1}ap?2a?1,即可得到逆元。

int quic_pow(int a, int n, int mod) {int ans = 1;while(n) {if(n & 1) ans = (ans * a) % mod;a = (a * a) % mod;n >>= 1;}return ans; } int inv(int a, int p) {return quick_pow(a, p - 2, p); }

求解二(拓展歐幾里德)

我們知道拓展歐幾里德算法可以求解ax+by=gcd(a,b)ax + by = gcd(a, b)ax+by=gcd(a,b),對逆元考慮假設有a?x+b?y=1a * x + b * y = 1a?x+b?y=1那么顯然有a?x≡1(modb)a * x \equiv 1 \pmod ba?x1(modb),這不就出來了嗎,xxx就是aaabbb下的逆元,當然了這里也要有a,ba, ba,b互質。

int exgcd(int a, int b, int & x, int & y) {if(!b) {x = 1, y = 0;return a;}int gcd = exgcd(b, a % b, x, y);int temp = x;x = y;y = temp - a / b * y;return gcd; } int main() {int a, mod, inv, t;exgcd(a, mod, inv, t);return 0; }

求解三(線性求解逆元)

我們假定有mod=k?a+b,k=moda,b=mod%a,b<amod = k * a + b, k = \frac{mod} {a}, b = mod \% a,b < amod=k?a+b,k=amod?,b=mod%ab<a

k?a+b≡0(modmod)k * a + b \equiv 0 \pmod {mod}k?a+b0(modmod)

同時乘以a?1b?1a ^ {-1}b^{-1}a?1b?1

k?b?1+a?1≡0(modmod)k * b ^{-1} + a ^{-1} \equiv 0 \pmod {mod}k?b?1+a?10(modmod)

a?1≡?k?b?1(modmod)a ^{-1} \equiv -k * b ^ {-1} \pmod {mod}a?1?k?b?1(modmod)

a?1≡mod?b?1?k?b?1(modmod)a ^ {-1} \equiv mod * b ^{-1} - k * b^ {-1} \pmod {mod}a?1mod?b?1?k?b?1(modmod)

所以我們就推導完了。

int inv[n], mod = 100007, n = mod; inv[1] = 1; for(int i = 2; i < n; i++) {inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod; }

求解四(CnmC _{n} ^ {m}Cnm?中的逆元求解)

a!?1=na! ^ {-1} = na!?1=n那么我們不難發現(a?1)!?1=a!?1?a(a - 1) ! ^ {-1} = a! ^{-1} * a(a?1)!?1=a!?1?a

void init() {fac[0] = 1;for(int i = 1; i < N; i++)fac[i] = (fac[i - 1] * i) % mod;inv[N - 1] = qpow(fac[N - 1], mod - 2);for(int i = N - 2; i >= 0; i--)inv[i] = (inv[i + 1] * (i + 1)) % mod; }

總結

以上是生活随笔為你收集整理的各种逆元推导的全部內容,希望文章能夠幫你解決所遇到的問題。

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