乘法逆元

乘法逆元

用途

\(oi\)比赛中,比较常用的算法就是快速幂了,但是快速幂有一定的缺点比如他只能处理乘法,加法,减法,唯独不能处理除法,也很令人麻烦,此时就需要用到逆元的操作了,此若\(ax\equiv1 (mod~{b}),且\)\(a\)\(b\)互质,那么我们就能定义: \(x\)为(\(a\))的逆元,记为\(a^{-1}\),所以我们也可以称\(x\)\(a\)的倒数,当我们快速幂的时候如果遇到\(\frac{a}{b}mod~~m\)的情况,就可以将\(\frac{1}{b}\)换成\(b\)关于\(m\)逆元即\(b'\),这样就可以进行快速幂的运算了。

求法

乘法逆元共三种情况,每种情况都有其特有的优缺点。

  1. 首先就是采用扩展欧几里得的方法来求同余方程,\(ax \equiv 1(mod~ b)\)这个式子可以等价于\(ax+by=1\)这个方程的解,所以我们只需求出\(x\)来就行。 (比较通用)

  2. 其次就是采用费马小定理+快速幂来求,但是这个条件比较苛刻,需要上文中的\(b\)是个质数,这时我们根据费马小定理可以得出\(a^{b-1}\equiv 1(mod~b)\) —> \(a * a^{b-2} \equiv 1(mod~b)\) 此时\(x\)就是\(a^{b-2}\)就是逆元,此时就可以用快速幂来解了。但是这个还是有点慢,不过在比赛中一般模数都是质数,所以也比较常用。

  3. 当要处理比较多的数的时候,可以采用线性推的方法,这个在求多个数的逆元上比较舒服。首先我们需要推一下,首先我们有一个,\(1 ^ {-1}\equiv 1(\bmod p)\)然后设\(p=k*i+r,r<i,1<i<p\),再将这个式子放到\(\bmod {p}\)意义下就会得到:

    \(k*i+r \equiv 0 (\bmod p)\)

    然后乘上\(i^{-1}*r^{-1}\)就可以得到:

    \(k*r^{-1}+i^{-1}\equiv 0 (\bmod p)\)

    \(i^{-1}\equiv -k*r^{-1} (\bmod p)\)

    \(i^{-1}\equiv -\lfloor \frac{p}{i} \rfloor*(p \bmod i)^{-1} (\bmod p)\)

    这种题不太常见,一般出现在多种数据之中,比如洛谷的模板

转载于:https://www.cnblogs.com/liuwenyao/p/9839247.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值