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 最大公约数-CSDN博客即可
三、快速幂求逆元
快速幂求逆元运用费马小定理,这要求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)-CSDN博客
(如果没记错的话,笔者年幼时曾阅读《幻想数学大战》,在书中接触过类似的思想,该思想源于文中所谓的《阿梅斯草纸书》。
笔者尝试继续追溯,其可能对应史料《阿默斯纸草书》,也即《莱因德纸草书》)
本文由“小苏打NaHCO3”原创,未经允许,严禁转载!
如果觉得本文对你有用,不妨点赞收藏一下吧!
标签:1.1,cdot,逆元,equiv,quad,aligned,mod From: https://blog.csdn.net/qq_43667525/article/details/144156784