写在前面

刷题过程中,为了避免高精度的整数运算,常常会要求答案对某个数取模。但这衍生了一个新问题,如果运算过程中涉及了除法,如ab\frac{a}{b}ba​,如果先对a和b取模再做除法,会导致答案错误。比如:
205mod10=4\frac{20}{5}\ mod\ 10 = 4520​ mod 10=4
但是,
20mod105mod10=0\frac{20\ mod\ 10}{5\ mod\ 10} = 05 mod 1020 mod 10​=0

为了解决这个问题,我们需要学习新知识:模运算下的乘法逆元。

乘法逆元

什么是逆元呢?百度百科告诉我们:逆元是指一个可以取消另一给定元素运算的元素。

比如,在实数的加法中,任意实数 a 和它的相反数 -a,互为加法逆元。因为对于任意实数 x,加上a之后,再加上-a,仍然等于 x,换言之,-a取消xa的加法运算。

再比如,在实数的乘法中,任意不为0的实数b和它的倒数1b\frac{1}{b}b1​,互为乘法逆元。因为对于任意实数x,乘上b之后,在乘上1b\frac{1}{b}b1​,仍然等于x,换言之,1b\frac{1}{b}b1​取消xb 的乘法运算。

接下来看看模运算下的乘法逆元定义:如果两个整数ab 满足 (a∗b−1)modp=0(a*b-1)\ mod\ p = 0(a∗b−1) mod p=0,即 a∗b≡1(modp)a*b≡1(mod\ p)a∗b≡1(mod p),则称,ab 互为模 p 的乘法逆元。

换言之,如果整数a, b, p 满足a∗b≡1(modp)a*b≡1(mod\ p)a∗b≡1(mod p),那么 b 可以取消 a 和任意整数x在模p时的乘法,即 ab 互为模 p 的乘法逆元。即 x∗a∗b≡x(modp)x*a*b≡x (mod\ p)x∗a∗b≡x(mod p),证明过程如下:

xmodp=x(a∗b−1)+xmodp=(x∗a∗b−x)+xmodp=x∗a∗bmodp\begin{aligned} x\ mod\ p &= x(a*b-1)+x \ mod\ p \\ &= (x*a*b-x)+x \ mod \ p \\ &= x*a*b \ mod \ p \end{aligned} x mod p​=x(a∗b−1)+x mod p=(x∗a∗b−x)+x mod p=x∗a∗b mod p​

举个实际的例子:比如 1012 互为模7时的乘法逆元。然后再找个整数,比如 18,此时有:

18mod7=418\ mod\ 7 = 4 \\ 18 mod 7=4

另有,

18∗10∗12mod7=2160mod7=4\begin{aligned} 18 * 10 * 12\ mod\ 7 &= 2160\ mod\ 7 \\ &= 4 \end{aligned} 18∗10∗12 mod 7​=2160 mod 7=4​

何时存在乘法逆元

结论

先说结论:ap 互质存在a关于模p的乘法逆元b 的充分必要条件。

存在逆元 → 互质

证明 ap 互质存在乘法逆元b必要条件。不妨先假设 ab 互为模p时的乘法逆元,且ap的最大公约数为d,则有:

(a∗b−1)modp=0(a*b-1)\ mod\ p = 0(a∗b−1) mod p=0

显然,a*b-1pn 倍,n 为整数,则上式转化为:

(a∗b−1)=np(a*b-1)=np(a∗b−1)=np

将等式中的apd代替,则等式转化为:

(x∗d∗b−1)=n∗y∗d(x∗d∗b−n∗y∗d)=1(x∗b−n∗y)∗d=1x∗b−n∗y=1d\begin{aligned} (x*d*b-1)&=n*y*d \\ (x*d*b - n*y*d) &= 1 \\ (x*b - n*y)*d &= 1 \\ x*b - n*y &= \frac{1}{d} \\ \end{aligned} (x∗d∗b−1)(x∗d∗b−n∗y∗d)(x∗b−n∗y)∗dx∗b−n∗y​=n∗y∗d=1=1=d1​​

显然,x*b-n*y是一个整数,所以仅当d1时,即ap互质时,上述等式才可能成立。

互质 → 存在逆元

证明 ap 互质存在乘法逆元b充分条件

在证明之前先来回忆一下辗转相除法:
gcd(a,p)=gcd(p,amodp)\begin{aligned} gcd(a,p) &= gcd(p, a\ mod\ p) \\ \end{aligned} gcd(a,p)​=gcd(p,a mod p)​

不妨用r来表示模运算的结果:
gcd(a,p)=gcd(p,r1)=gcd(r1,r2)=...=gcd(rm−1,rm)=1//因为a与p互质\begin{aligned} gcd(a,p) &= gcd(p, r_1) \\ &= gcd(r_1,r_2) \\ &= ... \\ &= gcd(r_{m-1}, r_m) \\ &= 1\ \ //因为a与p互质 \end{aligned} gcd(a,p)​=gcd(p,r1​)=gcd(r1​,r2​)=...=gcd(rm−1​,rm​)=1  //因为a与p互质​

将上式用除法表示,则有:
a=n1p+r1p=n2r1+r2r1=n3r2+r3...=...rm−3=nm−1rm−2+rm−1rm−2=nmrm−1rm−1=1rm=0\begin{aligned} a &= n_1p + r_1\\ p &= n_2r_1 + r_2 \\ r_1 & = n_3r_2 + r_3 \\ ... &= ... \\ r_{m-3} &= n_{m-1}r_{m-2} + r_{m-1} \\ r_{m-2} &= n_{m}r_{m-1} \\ r_{m-1} &= 1\\ r_{m} &= 0 \\ \end{aligned} apr1​...rm−3​rm−2​rm−1​rm​​=n1​p+r1​=n2​r1​+r2​=n3​r2​+r3​=...=nm−1​rm−2​+rm−1​=nm​rm−1​=1=0​

由上述的m+2个等式移项可得:
r1=a−n1pr2=p−n2r1...=...ri=ri−2−ni∗ri−1rm−1=rm−3−nm−1rm−2特别的,1=rm−1\begin{aligned} r_1 &= a - n_1p \\ r_2 &= p - n_2r_1 \\ ... &= ... \\ r_{i} &= r_{i-2} - n_{i}*r_{i-1} \\ r_{m-1} &= r_{m-3} - n_{m-1}r_{m-2} \\ 特别的,1 &= r_{m-1} \\ \end{aligned} r1​r2​...ri​rm−1​特别的,1​=a−n1​p=p−n2​r1​=...=ri−2​−ni​∗ri−1​=rm−3​−nm−1​rm−2​=rm−1​​

将 rm-1,rm-2 … 以及 r1 依次代入
1=rm−11 = r_{m-1}1=rm−1​

可以得到用 ap 以及 ni表示的等式:
ax+py=1ax+py=1ax+py=1

其中,xy 为 n1,n2,n3 … 的加减乘的运算结果,显然为整数

得证,当 ap 互质时,存在整数xy 满足
ax+py=1ax−1=py(ax−1)modp=0ax≡1(modp)\begin{aligned} ax+py &= 1 \\ ax-1 &= py \\ (ax-1)\ mod\ p &= 0 \\ ax &≡ 1\ (mod\ p) \end{aligned} ax+pyax−1(ax−1) mod pax​=1=py=0≡1 (mod p)​

即,当 ap 互质时,存在整数xa互为模p时的乘法逆元。

如何计算乘法逆元

扩展欧几里得算法

回忆一下欧几里得的递归过程:
gcd(a,b)=gcd(b,amodb)=gcd(b,a−b⌊ab⌋)\begin{aligned} gcd(a,b) &= gcd(b, a\ mod\ b) \\ &= gcd(b, a - b\lfloor \frac{a}{b} \rfloor) \end{aligned} gcd(a,b)​=gcd(b,a mod b)=gcd(b,a−b⌊ba​⌋)​

ab 互质时,有 x,y,x',y' 满足:
{ax+by=1bx′+(a−b⌊ab⌋)y′=1\left\{ \begin{aligned} ax+by=1 \\ bx'+ (a - b\lfloor \frac{a}{b} \rfloor)y' = 1\\ \end{aligned} \right. ⎩⎨⎧​ax+by=1bx′+(a−b⌊ba​⌋)y′=1​

将上式合并移项:
bx′+(a−b⌊ab⌋)y′=ax+bya(x−y′)+b(y−(x′−⌊ab⌋)y′)=0\begin{aligned} bx'+ (a - b\lfloor \frac{a}{b} \rfloor)y'&=ax+by \\ a(x-y') + b(y-(x'-\lfloor \frac{a}{b} \rfloor)y')&=0 \end{aligned} bx′+(a−b⌊ba​⌋)y′a(x−y′)+b(y−(x′−⌊ba​⌋)y′)​=ax+by=0​

x,y,x',y' 满足下述关系,则对于任意 ab 上述公式都能成立。
{x=y′y=(x′−⌊ab⌋)y′\left\{ \begin{aligned} x &= y' \\ y &= (x'-\lfloor \frac{a}{b} \rfloor)y' \\ \end{aligned} \right. ⎩⎨⎧​xy​=y′=(x′−⌊ba​⌋)y′​

乘法逆元的解法及证明相关推荐

  1. 乘法逆元(inverse element)及四大相关求法详解(含证明)

    文章目录 乘法逆元及四大相关求法详解(含证明) 开胃菜 1. 定义及理解 1.1 乘法逆元的定义 1.1.1 极简定义 1.1.2 详细定义 1.1.3 理解及其相关证明<br> 2. 逆 ...

  2. 数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】)

    虽然作业还没有做完,但是我还是放不下它,对此,我只想说: 今天你对作业爱理不理,明天它就让你补到飞起 DP先放放,我们要雨露均沾 练习上手:乘法逆元 题目 题解 代码实现 曹冲养猪?(互质的中国剩余定 ...

  3. 求乘法逆元的几种方法

    (数学渣,下面的文字可能有误,欢迎指教) 乘法逆元的定义貌似是基于群给出的,比较简单地理解,可以说是倒数的概念的推广.记a的关于模p的逆元为a^-1,则a^-1满足aa^-1≡ 1(mod p) 加减 ...

  4. java求乘法逆元的代码_求乘法逆元的几种方法

    (数学渣,下面的文字可能有误,欢迎指教) 乘法逆元的定义貌似是基于群给出的,比较简单地理解,可以说是倒数的概念的推广.记a的关于模p的逆元为a^-1,则a^-1满足aa^-1≡ 1(mod p) 加减 ...

  5. 逆元~(乘法逆元及其应用)

    数论倒数,又称逆元(因为我说习惯逆元了,下面我都说逆元) 先来引入求余概念 (a +  b) % p = (a%p +  b%p) %p  (对) (a  -  b) % p = (a%p  -  b ...

  6. 扩展欧几里得算法、乘法逆元与中国剩余定理

    文章目录 前言 定义.定理和部分证明 整除 定义 定理 定理的证明 同余 定义 同余的性质 同余的运算律 运算律的证明 扩展欧几里得算法 代码模板 算法详解 乘法逆元 求解逆元 乘法逆元的作用 中国剩 ...

  7. java乘法逆元与除法取模,关于数论乘法逆元及相关知识点

    在求解a/b%m时,可以转化为(a%(b*m))/b,转化过程如下 令k = (a/b)/m(向下取整), x = (a/b)%m; a/b = k*m + x (x < m); a = k*b ...

  8. 整数a关于模m的乘法逆元

    文章目录 模m的乘法逆元 定义 迭代算法 数学归纳法证明 C++代码实现 递归算法 扩展欧几里得算法 代码实现 写法一: 简单证明: 写法二: 简单证明: 算法实现 相关联想以及应用 结尾 模m的乘法 ...

  9. 同余方程、欧拉定理、乘法逆元、定义在Zm上的矩阵求逆

    上篇简单介绍了一下仿射密码:仿射密码的加密与解密,很多东西都没有深入去挖掘,这次上完课后对实现它的一些概念公式又有了一个更深的认识. 目录 1.模同余 2.一次同余方程唯一解定理 3.欧拉函数和欧拉定 ...

最新文章

  1. C语言100个经典的算法
  2. docker挂载NVIDIA显卡
  3. 【洛谷p1058】立体图(已完结)
  4. python动态语言解释_python是动态语言吗
  5. 最近微软购买了哪些域名?
  6. JavaSE(四)——方法重写、多态、接口
  7. inux中限制用户进程CPU和内存占用率
  8. 木兰编程语言重现——儿歌查询实例,引用模块、字符串列表操作
  9. sp_getapplock_sp_getapplock和sp_releaseapplock存储过程概述
  10. Cache之全相连映射
  11. Xcode学习C++(一项目的建立)
  12. 学习FLTK 使用Fl_Menu_Bar
  13. 经典软件体系结构风格(一)
  14. 论基于架构的软件设计方法及应用
  15. [机缘参悟-61]:《兵者,诡道也》-2-三十六计解读-胜战计
  16. PyCharm New environment和Existing environment
  17. debian 7 安装 rz sz lrzsz
  18. linux读取文件内容 cat,Linux 读取文件:cat 命令(拼接文件)
  19. 通常我们将python语言程序保存在一个后缀_c 语言程序设计 沈显君课后答案
  20. 介绍篇 决策引擎环节

热门文章

  1. ubuntu输出hash值
  2. Avada v5.4.4 最新版本破解教程
  3. 洛古P2392-kkksc03考前临时抱佛脚
  4. git执行了“git-clean--fdx”之类的误删了代码的恢复操作
  5. 关于灰度拉伸的一点思考
  6. RRAM/ Near Memory Computing (NMC) Survey - Reading Notes 0705
  7. 2022年湖北恩施助理工程师(初级职称)职称申报专业有哪些?甘建二
  8. EasyStack仅仅是重新定义超融合么?
  9. Q键连发。按住Q键则连发。松开则停止1。
  10. Java设计模式-策略模式(Strategy)