1.1.4 逆元

1.1.4 逆元

主要内容:扩欧求逆元,快速幂求逆元,线性(递归)求逆元,同余模公式(补充),反复平方法求幂(补充)

一、 逆元

首先给出逆元的定义:

$$
\begin{aligned} 假设a\cdot p &\equiv 1 \quad(mod \quad b)\\ 且(a,b)&=1\quad即\quad a,b互素\\ 则称p为a的逆元&,记作p=a^{-1} \end{aligned}
$$

用与前文类似的方法,我们将同余方程转化为二元一次不定方程:

$$
pa+qb=1
$$

则求解逆元的过程,就是对此不定方程求解的过程

二、扩欧求逆元

很明显,上面的方程是一个二元一次不定方程,我们可以使用扩欧求解

具体代码参考1.1.3 最大公约数-优快云博客即可

三、快速幂求逆元

快速幂求逆元运用费马小定理,这要求p为素数

限于时间不足,作者将在之后的时间整理此部分内容

四、 线性(递归)求逆元

下面给出推导:

$$
\begin{aligned} 假设p&=ki+r\\ 现在尝试求i在模p下的逆元i^{-1},即有i\cdot i^{-1} &\equiv 1\quad (mod\quad p)\\ 将上述等式放在模p意义下,得到同余式:\\ k\cdot i+ r&\equiv0\quad(mod\quad p)\\ 两边同乘i^{-1},得到\\ k+r\cdot i^{-1}&\equiv 0\quad(mod\quad p)\\ 再同乘r^{-1},得到\\ k\cdot r^{-1}+i^{-1}&\equiv 0\quad(mod\quad p)\\ 即\\ i^{-1}&\equiv-k\cdot r^{-1} \quad(mod\quad p)\quad\quad\quad(*)\\ 根据定义可知,k=[\frac{p}{i}]&,r=p\%i\\ 于是,我们将一个求解i^{-1}的问题&转化为求解(p\%i)^{-1}的问题 \end{aligned}
$$

我们的算法基于(*)式得到

$$
按照(*)式,我们可以得到一个逆元的线性求法,时间复杂度为O(n),\\ 迭代方程如下:\\ inv[i] = (p - p / i) \cdot inv[p \% i] \% p;\\ 但实际上,我们可以使用递归的方法,在O(log_2n)的时间里更高效地求出逆元\\ 递归方程如下:\\ i^{-1}=\left\{ \begin{matrix} \begin{aligned} 1 \quad &i=1\\ -[\frac{p}{i}]\cdot(p\%i)^{-1} \quad &其他情况\\ \end{aligned} \end{matrix} \right.\quad\quad(mod\quad p)\\
$$

递归法代码实现如下:

int inv(int i, int p){
    if (i==1) return 1;
    return -(p/i)*inv(p%i);
}

四、 同余模公式、反复平方法求幂(补充)

同余模公式:

$$
\begin{aligned} (a+b)\%p \quad &= \quad (a\%p + b\%p) \%p\\ (a\cdot b)\%p \quad &= \quad (a\%p \cdot b\%p) \%p \end{aligned}
$$

反复平方法求幂:

这是快速幂取模的主要算法思想,想了解该算法的同学可以参照0x01 位运算(1)-优快云博客

(如果没记错的话,笔者年幼时曾阅读《幻想数学大战》,在书中接触过类似的思想,该思想源于文中所谓的《阿梅斯草纸书》。

笔者尝试继续追溯,其可能对应史料《阿默斯纸草书》,也即《莱因德纸草书》)

本文由“小苏打NaHCO3”原创,未经允许,严禁转载!

如果觉得本文对你有用,不妨点赞收藏一下吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值