乘法逆元

来源:互联网 发布:21cn邮箱数据哪里有卖 编辑:程序博客网 时间:2024/05/22 00:19
定义:
满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元。

为什么要有乘法逆元呢?
当我们要求(a/b) mod p的值,且a很大,无法直接求得a/b的值时,我们就要用到乘法逆元。
我们可以通过求b关于p的乘法逆元k,将a乘上k再模p,即(a*k) mod p。其结果与(a/b) mod p等价。

证:(其实很简单。。。)
根据b*k≡1 (mod p)有b*k=p*x+1。
k=(p*x+1)/b。
把k代入(a*k) mod p,得:
(a*(p*x+1)/b) mod p
=((a*p*x)/b+a/b) mod p
=[((a*p*x)/b) mod p +(a/b)] mod p
=[(p*(a*x)/b) mod p +(a/b)] mod p
//p*[(a*x)/b] mod p=0

所以原式等于:(a/b) mod p


typedef long long LL ;LL exgcd(LL a,LL b,LL &x,LL &y){if( b == 0 ) {x = 1;y = 0;return a;}else{LL x1,y1;LL d = exgcd ( b , a % b , x1 , y1 );x = y1;y= x1 - a / b * y1;return d;}}


0 0
原创粉丝点击