乘法逆元及其求法
一、相關定理介紹
1.乘法逆元
如果ax≡1 (mod p),且gcd(a,p)=1(a與p互質),則稱a關于模p的乘法逆元為x。下文中,x都表示乘法逆元。 2.費馬小定理或者寫作: 3.擴展歐幾里得定理 已知整數a、b,擴展歐幾里得算法可以在求得a、b的最大公約數的同時,能找到整數x、y(其中一個很可能是負數),使它們滿足貝祖等式。
二、乘法逆元的求法 1.費馬小定理 由費馬小定理?ap-1≡1?, 變形得 a*ap-2≡1(mod p),答案已經很明顯了:若a,p互質,因為a*ap-2≡1(mod p)且a*x≡1(mod p),則x=ap-2(mod p),用快速冪可快速求之. 2.擴展歐幾里得
三、乘法逆元與除法取模
如果ax≡1 (mod p),且gcd(a,p)=1(a與p互質),則稱a關于模p的乘法逆元為x。下文中,x都表示乘法逆元。 2.費馬小定理
假如a是一個整數,p是一個質數,那么是p的倍數,可以表示為
我們都知道模就是余數,比如12%5=12-5*2=2,18%4=18-4*4=2。(/是程序運算中的除)
那么ax≡1 (mod p)即ax-yp=1.把y寫成+的形式就是ax+py=1,為方便理解下面我們把p寫成b就是ax+by=1。就表示x是a的模b乘法逆元,y是b的模a乘法逆元。然后就可以用擴展歐幾里得求了。
求a/b=x(mod M)
只要M是一個素數,而且b不是M的倍數,就可以用一個逆元整數b1,通過 a/b=a*b1 (mod M),只能來以乘換除。
費馬小定理:對于素數 M 任意不是 M 的倍數的 b,都有:b ^ (M-1) = 1 (mod M)
于是可以拆成:b*b^(M-2)=1(mod M)
于是:a/b=a/b*(b * b ^ (M-2))=a*(b ^ (M-2)) (mod M)
求a/b=x(mod M)
用擴展歐幾里德算法算出b1,然后計算a*b1(mod M)
exgcd(b,M,x,y); ? b1=x;
?
當p是個質數的時候有
inv(a) = (p - p / a) * inv(p % a) % p
?
證明:
設x = p % a,y = p / a
于是有 x + y * a = p
(x + y * a) % p = 0
移項得 x % p = (-y) * a % p
x * inv(a) % p = (-y) % p
inv(a) = (p - y) * inv(x) % p
于是 inv(a) = (p - p / a) * inv(p % a) % p
然后一直遞歸到1為止,因為1的逆元就是1
總結
- 上一篇: Three.js数据结构、导入导出(.t
- 下一篇: QCC304x系列开发教程(实战篇) 之