乘法逆元
对于缩系中的元素,每个数a均有唯一的与之对应的乘法逆元x,使得ax≡1(mod n)
一个数有逆元的充分必要条件是gcd(a,n)=1,此时逆元唯一存在
逆元的含义:模n意义下,1个数a如果有逆元x,那么除以a相当于乘以x。
下面给出求逆元的几种方法:
1.扩展欧几里得
给定模数m,求a的逆相当于求解ax=1(mod m)
这个方程可以转化为ax-my=1
然后套用求二元一次方程的方法,用扩展欧几里得算法求得一组x0,y0和gcd
检查gcd是否为1
gcd不为1则说明逆元不存在
若为1,则调整x0到0~m-1的范围中即可
PS:这种算法效率较高,常数较小,时间复杂度为O(ln n)
-
typedef long long ll; -
void extgcd(ll a,ll b,ll& d,ll& x,ll& y){ -
if(!b){ d=a; x=1; y=0;} -
else{ extgcd(b,a%b,d,y,x); y-=x*(a/b); } -
} -
ll inverse(ll a,ll n){ -
ll d,x,y; -
extgcd(a,n,d,x,y); -
return d==1?(x+n)%n:-1; -
}
2.费马小定理
在模为素数p的情况下,有费马小定理
a^(p-1)=1(mod p)
那么a^(p-2)=a^-1(mod p)
也就是说a的逆元为a^(p-2)
而在模不为素数p的情况下,有欧拉定理
a^phi(m)=1(mo

本文介绍了数论中的乘法逆元概念,详细阐述了如何在模运算下求解逆元,包括扩展欧几里得算法、费马小定理和欧拉定理的应用,并探讨了特殊情况下的逆元求法,如模质数的逆元打表方法。此外,还讨论了逆元存在的条件及其验证方法。
最低0.47元/天 解锁文章
788

被折叠的 条评论
为什么被折叠?



