#逆元的定义
Xiaohuba 的温馨提示:不想看这部分群论上逆元的定义的读者,可直接阅读下一章。
看到这个标题时,我们不妨将目光放得更为长远些,何为逆元?
它的定义要从“群”说起。
群是啥?
qq群,微信群,钉钉群……
#群的构成
一个群 ( group ) 由两部分组成:一种二元运算符 ( binary operator ),一般记作 "⋅";以及一个集合 G。
#群的幺元
群 (G,⋅) 的幺元 e 定义为:若存在 e∈G 使得 ∀a∈G,a⋅e=a 成立,则称 e 是此群的幺元,
e 有且仅有一个。
例子:正整数加法群 (Z+,+) 的幺元 e=0,(0+1=1,0+666=666⋯)
#群的逆元
群 (G,⋅) 的逆元定义为:∀a∈G,总存在 b 使得 a⋅b=b⋅a=e,则 b 是 a 的逆元,记作 a−1。
#乘法逆元
根据上面的定义,乘法逆元的定义也不难得到:
带模乘法群 (Z,(×,mod)) 的逆元定义为:对于 a∈Z,若存在 b 使得 ab≡1(modm),则称 b 是在模 m 意义下 a 的逆元。
不基于群论的定义:若存在 b 使得 ab≡1(modm),则称 b 是 a 在模 m 意义下的乘法逆元。
最直接的应用:解决了除法取模的问题,即 qp≡pq−1(modm)
#exgcd 求解
ab≡1(modm)
ab=mq+1(q∈Z)
ab−mq=1
当 gcd(a,m)=1 时,此方程为 ax+by=gcd(x,y) 的形式,可以用 exgcd 求解。
#费马小定理求解
考虑费马小定理:对于任意素数 p,对于所有与 p 互素的数 a 有 ap≡p(modp)
即 ap−1≡1(modp)
a∗ap−2≡1(modp)
所以当 m 为素数时,b=am−2modm
使用带模快速幂求解即可。
#逆元的递推柿
尝试通过递推来求出 [1,n]∩N 中所有数在模 m 意义下的乘法逆元。
不妨令 ivi 表示 i 在模 m 意义下的逆元。
特别地,iv1=1
考虑如何求出 ivx。
设 q=⌊xm⌋,r=mmodx。
xq+r≡0(modm)
同时乘以 x−1∗r−1
r−1q+x−1≡0(modm)
x−1≡−r−1q(modm)
x−1≡(−⌊xm⌋(mmodx)−1)modp
为了避免负数取模的锅,我们得到递推式如下:
ivi=(m−⌊im⌋)∗ivmmodimodm
这个柿子在求解组合数时较为常用。