乘法逆元

乘法逆元

乘法逆元在模算术中具有举足轻重的地位,\(OI\)中随处可见它的身影,是一个\(OIer\)必不可少的基础技能。

对于乘法逆元的作用,我觉得这个总结的挺好:

乘法逆元,一般用于求
\[ \frac{a}{b}\pmod{p} \]
的值(\(p\)为质数),是解决模意义下除法运算的重要手段。

乘法逆元定义

如果一个线性同余方程\(ax\equiv 1\pmod{p}\),则\(x\)称为\(a\mod p\)的逆元,记作\(a^{-1}\)

求逆元的一般方法

扩展欧几里得求解线性同余方程

线性同余方程:给定整数\(a,b,m\),求一个整数\(x\)满足\(a*x\equiv b\pmod{m}\),或给出无解。由于未知数次数为1,我们也称其为线性同余方程。其等价于求解方程\(ax+my=b\),其中\(y\)\(-\frac{ax-b}{m}\)

显而易见,该方程可以用\(Bezout\)定理求解,由定理得其有解当且仅当\(\gcd(a,m)\mid b\)。具体做法就是求出特解\(\gcd(a,m)\)然后通分。

inline int exgcd(int a,int b,int &x,int &y)
{
    if(b==0){x=1,y=0;return a;}
    int d=exgcd(b,a%b,x,y);
    int z=x;x=y;y=z-y*(a/b);
    return d;
}
费马小定理

费马小定理:
\[ a^{p-1}\equiv 1\pmod{p} \]
其可以化为:
\[ a^{p-2}*a\equiv 1 \pmod{p} \]
根据乘法逆元的定义,\(a^{p-2}\)即为\(a\)在模\(p\)意义下的逆元。通过快速幂我们就可以\(O(logn)\)地求任意正整数的逆元。

线性求逆元

上面两种方法一般是计算单个正整数的逆元时使用,如果我们需要一堆数的逆元时,上面两种算法都显得很慢了。

对于一个正整数\(p\),它可以被写作\(kq+r\)的形式,其中\(q<r\)。即\(p=kq+r\),在模\(p\)的意义下,它记为\(kq+r\equiv 0\pmod{p}\),移项得\(-kq\equiv r\pmod{p}\),两边同时乘上\(q,r\)的逆元,得到\(-kr^{-1}\equiv q^{-1}\pmod{p}\),把\(r\)\(k\)替换成\(p\),再变化一下,得到\((p-\frac{p}{q})(p\mod q)^{-1}\mod p = q^{-1}\)

inv[1]=1;
for(int i=2;i<=n;++i) inv[i]=(p-p/i)*inv[p%i]%p;

转载于:https://www.cnblogs.com/DarkValkyrie/p/11316303.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值