对于整数而言:
模运算的性质
a
m
o
d
b
=
a
−
b
⌊
a
b
⌋
a\;mod\;b=a-b\lfloor\frac a b\rfloor
amodb=a−b⌊ba⌋,对于负数也依然如此。
其中符号
⌊
⌋
\lfloor\;\;\;\rfloor
⌊⌋表示向下取整。
- (a%m+b%m)%m=(a+b)%m
将a、b取模m分为倍数部分和余数部分,无论如何取模,倍数部分都不做贡献。性质显然成立。 - (a%m×b%m)%m=a×b%m
取模运算的优先级定义为与乘除运算优先级相当,从左到右依次计算。
将a、b取模m分为倍数部分和余数部分,无论如何取模,倍数部分都不做贡献。性质显然成立。
或者将乘法变为若干次加法,也可以说明性质成立。
同余式的定义
对于a
m
o
d
mod
mod m=b
m
o
d
mod
mod m,我们称a、b在模m的意义下同余,即具有相同的余数。
记作
a
≡
b
(
m
o
d
m
)
a \equiv b \;(mod\;m)
a≡b(modm),简写成
a
≡
b
a \equiv b
a≡b。
以下性质均在同一模数下成立:
- 由于模运算的性质: A ≡ a , B ≡ b ⇒ A ± B ≡ a ± b A\equiv a ,B \equiv b\Rightarrow A\pm B\equiv a\pm b A≡a,B≡b⇒A±B≡a±b
- 因而有: A ≡ a ⇒ k ⋅ A ≡ k ⋅ a A\equiv a\Rightarrow k\cdot A\equiv k\cdot a A≡a⇒k⋅A≡k⋅a
- 因而有:
A
≡
a
,
B
≡
b
⇒
A
B
≡
a
b
A\equiv a,B\equiv b\Rightarrow AB\equiv ab
A≡a,B≡b⇒AB≡ab
这是由于:
A ≡ a ⇒ A B ≡ a B A\equiv a \Rightarrow AB\equiv aB A≡a⇒AB≡aB
B ≡ b ⇒ a B ≡ a b B\equiv b \Rightarrow aB\equiv ab B≡b⇒aB≡ab
QED. - 进而有: A ≡ a ⇒ A k ≡ a k A\equiv a \Rightarrow A^k\equiv a^k A≡a⇒Ak≡ak
显然有 a ≡ a a\equiv a a≡a,这说明,同一模数,模意义下可以自由地做加减乘法,也可以移项,移项要变号。
乘法逆元
模意义下是没有除法的,那么如何将 a x ≡ b ax\equiv b ax≡b这个式子转化成 a ≡ b ⋅ y a\equiv b\cdot y a≡b⋅y的形式呢?
我们只需要找到 x − 1 x^{-1} x−1,使得 x ⋅ x − 1 ≡ 1 x\cdot x^{-1}\equiv 1 x⋅x−1≡1,然后在 a x ≡ b ax\equiv b ax≡b乘上 x − 1 x^{-1} x−1,就会有: a x ⋅ x − 1 ≡ b x − 1 ax\cdot x^{-1}\equiv bx^{-1} ax⋅x−1≡bx−1,即 a ≡ b x − 1 a\equiv bx^{-1} a≡bx−1
那么对于 x ⋅ x − 1 ≡ 1 x\cdot x^{-1}\equiv 1 x⋅x−1≡1,就称 x x x与 x − 1 x^{-1} x−1互为模 m m m时的乘法逆元。
显然逆元在模意义下是唯一的,因为若有 x ⋅ x − 1 ≡ 1 , x ⋅ x ′ − 1 ≡ 1 , x − 1 ≢ x ′ − 1 x\cdot x^{-1}\equiv 1,x\cdot {x'^{-1}}\equiv 1,x^{-1}\not\equiv{x'^{-1}} x⋅x−1≡1,x⋅x′−1≡1,x−1≡x′−1,则 x ⋅ x − 1 ≡ 1 ≡ x ⋅ x ′ − 1 x\cdot x^{-1}\equiv 1\equiv x\cdot {x'^{-1}} x⋅x−1≡1≡x⋅x′−1,则 x − 1 ≡ x ′ − 1 x^{-1}\equiv x'^{-1} x−1≡x′−1,矛盾。
枚举一下就会发现, x x x模 m m m不一定会存在逆元。
计算乘法逆元
剩余系
剩余类(同余类)
给定一个正整数 m m m,把所有整数根据模 m m m的余数分为 [ 0 , m − 1 ] [0,m-1] [0,m−1]这 m m m类,每一类 C r C_r Cr代表可以被表示为 p ⋅ m + r p\cdot m+r p⋅m+r形式的数。
完全剩余系(完系)
从每个模 m m m剩余类中取出一个数字,构成一个大小为m的集合,称为模m的一个剩余系。
简化剩余系(缩系)
我们从每个余数与 m m m互质的剩余类中取出一个数字,构成一个大小为 φ ( m ) \varphi(m) φ(m)的集合,称为模m的一个既约剩余系(简化剩余系)。
显然既约剩余系中的每一个数都与
m
m
m互质,考虑
n
=
p
⋅
m
+
r
n=p\cdot m+r
n=p⋅m+r,则有:
gcd
(
n
,
m
)
=
gcd
(
n
%
m
,
m
)
=
gcd
(
r
,
m
)
=
1
\gcd(n,m)=\gcd(n\%m,m)=\gcd(r,m)=1
gcd(n,m)=gcd(n%m,m)=gcd(r,m)=1
欧拉定理
欧拉定理即为:
a
φ
(
m
)
≡
1
(
m
o
d
m
)
(
a
⊥
m
)
a^{\varphi(m)}\equiv 1\;\;(mod\;m)\;\;\;(a\perp m)
aφ(m)≡1(modm)(a⊥m)
这意味着:
a
φ
(
m
)
−
1
⋅
a
≡
1
(
m
o
d
m
)
a^{\varphi(m)-1}\cdot a\equiv 1\;\;(mod\; m)
aφ(m)−1⋅a≡1(modm)
也就是说:
a
−
1
≡
a
φ
(
m
)
−
1
(
m
o
d
m
)
a^{-1}\equiv a^{\varphi(m)-1}\;\;(mod\;m)
a−1≡aφ(m)−1(modm)
因此欧拉定理可以用来寻找逆元。
证明一下欧拉定理:
设
a
a
a表示模m的一个既约剩余系。
a
i
a_i
ai表示取到其第i个元素。
首先证明:
∀
a
i
∈
a
,
{
a
i
⋅
x
∣
x
∈
a
}
也是模
m
的一个既约剩余系
\forall a_i\in a,\{a_i\cdot x|x\in a\}也是模m的一个既约剩余系
∀ai∈a,{ai⋅x∣x∈a}也是模m的一个既约剩余系
先证明,集合
{
a
i
⋅
x
∣
x
∈
a
}
\{a_i\cdot x|x\in a\}
{ai⋅x∣x∈a}的模意义下的元素是两两不同的:
假设有
a
i
⋅
x
≡
a
i
⋅
y
(
m
o
d
m
)
(
x
≢
y
)
a_i\cdot x\equiv a_i\cdot y\;\;(mod\;m)(x\not\equiv y)
ai⋅x≡ai⋅y(modm)(x≡y),那么根据我们下面说到的第三种求逆元的方法的理论,我们知道,必存在
a
i
a_i
ai的逆元,因此
x
≡
y
x\equiv y
x≡y,矛盾。
接着证明,
∀
X
∈
{
a
i
⋅
x
∣
x
∈
a
}
:
X
⊥
m
\forall X\in\{a_i\cdot x|x\in a\}:X\perp m
∀X∈{ai⋅x∣x∈a}:X⊥m,也就是集合中的每一个元素都与m是互质的。
这很显然,由于
a
i
⊥
m
,
x
⊥
m
a_i\perp m,x\perp m
ai⊥m,x⊥m,则两者都与m无公共因子,立即得出
a
i
⋅
x
⊥
m
a_i\cdot x\perp m
ai⋅x⊥m。
那么我们证明了
∀
a
i
∈
a
,
{
a
i
⋅
x
∣
x
∈
a
}
也是模
m
的一个既约剩余系
\forall a_i\in a,\{a_i\cdot x|x\in a\}也是模m的一个既约剩余系
∀ai∈a,{ai⋅x∣x∈a}也是模m的一个既约剩余系。
定义这个集合为
S
S
S
则有
∏
a
≡
∏
S
(
m
o
d
m
)
\prod a\equiv \prod S\;\;(mod\;m)
∏a≡∏S(modm)
S
S
S的每一个元素都可以提出一个
a
i
a_i
ai,作为既约剩余系,它共有
φ
(
m
)
\varphi(m)
φ(m)个元素:
∏
a
≡
a
i
φ
(
m
)
∏
a
(
m
o
d
m
)
\prod a\equiv a_i^{\varphi(m)}\prod a\;\;(mod\;m)
∏a≡aiφ(m)∏a(modm)
仿照上面的证明,立即得知 ∏ a ⊥ m \prod a\perp m ∏a⊥m,所以根据下文所说,我们知道存在逆元,可以除掉:
a i φ ( m ) ≡ 1 ( m o d m ) a_i^{\varphi(m)}\equiv 1\;\;(mod\;m) aiφ(m)≡1(modm)
a
i
a_i
ai是模m既约剩余系的任意一个元素,因此:
∀
x
⊥
m
:
x
φ
(
m
)
≡
1
(
m
o
d
m
)
\forall x\perp m:x^{\varphi(m)}\equiv 1\;\;(mod\;m)
∀x⊥m:xφ(m)≡1(modm)
可以先筛出欧拉函数值,然后
x
φ
(
m
)
x^{\varphi(m)}
xφ(m)可以用快速幂求。
时间复杂度O(n)~O(logn)
费马小定理
费马小定理说的是:
x
p
−
1
≡
1
(
m
o
d
p
)
(
p
∈
P
)
x^{p-1}\equiv 1\;\;(mod\;p)(p\in\mathbb{P})
xp−1≡1(modp)(p∈P)
因此费马小定理也可以用来求逆元:
x
p
−
2
≡
x
−
1
(
m
o
d
p
)
x^{p-2}\equiv x^{-1}\;\;(mod\;p)
xp−2≡x−1(modp)
费马小定理是欧拉定理的特殊情况,带入 φ ( p ) = p − 1 \varphi(p)=p-1 φ(p)=p−1立即得到费马小定理。
费马小定理常用快速幂求逆元。
时间复杂度O(logn)
同余方程转不定方程,Exgcd求乘法逆元
注意到同余方程
x
⋅
x
−
1
≡
1
(
m
o
d
m
)
x\cdot x^{-1}\equiv 1\;\;(mod\;m)
x⋅x−1≡1(modm)实际上等于相当于不定方程
x
⋅
x
−
1
+
m
⋅
y
=
1
x\cdot x^{-1}+m\cdot y=1
x⋅x−1+m⋅y=1,其中
x
,
m
x,m
x,m是常数,
x
−
1
,
y
x^{-1},y
x−1,y是未知数,均为整数。
那么存在逆元相当于此不定方程有整数解,也即 gcd ( x , m ) ∣ 1 \gcd(x,m)|1 gcd(x,m)∣1,则 gcd ( x , m ) = 1 \gcd(x,m)=1 gcd(x,m)=1,即 x ⊥ m x\perp m x⊥m时存在逆元。
因此可以用exgcd求出 x − 1 x^{-1} x−1,即为逆元。
求解一次同余方程
含有未知数的同余式称为同余方程。
对于一元一次同余方程 a x ≡ b ( m o d m ) ax\equiv b\;\;(mod\;m) ax≡b(modm),有以下两种解法:
- 同余方程转不定方程:
此同余方程等价于不定方程 a x + m y = b ax+my=b ax+my=b,可以用exgcd求解。
同时我们得到了同余方程有解的充分必要条件: gcd ( a , m ) ∣ b \gcd(a,m)|b gcd(a,m)∣b。 - 乘法逆元:
若 a ⊥ m a\perp m a⊥m,则存在 a a a在模 m m m意义下的乘法逆元,可立即得出 x ≡ b ⋅ a − 1 x\equiv b\cdot a^{-1} x≡b⋅a−1。 - 技巧做法:
首先注意到 a x ≡ b ( m o d b ) ⇔ a x + m y = b ax\equiv b\pmod b\Leftrightarrow ax+my=b ax≡b(modb)⇔ax+my=b
设 gcd ( a , m ) = g \gcd(a,m)=g gcd(a,m)=g,若 g ∣ b g|b g∣b有解,否则无解。
因此不定方程两边同时除以 g g g:
a g ⋅ x + m y g = b g \frac{a}g\cdot x+\frac{my}g=\frac bg ga⋅x+gmy=gb
这意味着同余方程也可以同除以 g g g:
a g ⋅ x ≡ b g ( m o d m g ) \frac a g\cdot x\equiv \frac b g\pmod {\frac mg} ga⋅x≡gb(modgm)
(随便说一句,既然可以同时除,那么就可以同时乘对吧.)
此时 a g ⊥ m g \frac a g\perp\frac mg ga⊥gm,除过来:
x ≡ b g ⋅ ( a g ) − 1 x\equiv \frac bg\cdot\left(\frac ag\right)^{-1} x≡gb⋅(ga)−1
由于这种方法需要求逆元,因此实用性不足(这要求筛出欧拉函数,或要求 m g \frac m g gm为质数,但事实上, m g \frac mg gm不一定为质数),但是它具有很大的启发性。
这说明单个同余方程的解满足形式:
x
≡
x
0
(
m
o
d
m
g
c
d
(
a
,
m
)
)
x\equiv x_0\;\;\;\left(mod\;{\frac m{gcd(a,m)}}\right)
x≡x0(modgcd(a,m)m)
x
0
≡
b
g
⋅
(
a
g
)
−
1
(
m
o
d
m
g
c
d
(
a
,
m
)
)
x_0\equiv \frac bg \cdot\left(\frac ag\right)^{-1}\;\;\;\left(mod\;{\frac m{gcd(a,m)}}\right)
x0≡gb⋅(ga)−1(modgcd(a,m)m)
批量求逆元
模m
计算 { 1 , 2 , . . . , m − 2 , m − 1 } \{1,2,...,m-2,m-1\} {1,2,...,m−2,m−1}模m的乘法逆元:
有
k
!
=
k
×
(
k
−
1
)
×
(
k
−
2
)
.
.
.
×
2
×
1
k!=k\times(k-1)\times(k-2)...\times 2\times 1
k!=k×(k−1)×(k−2)...×2×1:
(
k
−
1
)
!
−
1
≡
k
!
−
1
⋅
k
(k-1)!^{-1}\equiv k!^{-1}\cdot k
(k−1)!−1≡k!−1⋅k,
k
−
1
≡
(
k
−
1
)
!
×
k
!
−
1
k^{-1}\equiv (k-1)!\times k!^{-1}
k−1≡(k−1)!×k!−1,只需要求
n
!
−
1
n!^{-1}
n!−1
模质数M
计算 { 1 , 2 , . . . , M − 2 , M − 1 } \{1,2,...,M-2,M-1\} {1,2,...,M−2,M−1}模质数M的乘法逆元:
其中
1
−
1
≡
1
1^{-1}\equiv 1
1−1≡1,对于
x
≥
2
x\geq 2
x≥2,有:
⌊
M
x
⌋
⋅
x
+
M
%
x
≡
M
≡
0
(
m
o
d
M
)
\left\lfloor\frac {M}{x}\right\rfloor\cdot x+M\%x\equiv M\equiv 0\pmod M
⌊xM⌋⋅x+M%x≡M≡0(modM)
则:
x
≡
−
(
M
%
x
)
⌊
M
x
⌋
−
1
(
m
o
d
M
)
x\equiv -\left(M\%x\right) \left\lfloor\frac {M}{x}\right\rfloor^{-1}\pmod M
x≡−(M%x)⌊xM⌋−1(modM)
x
−
1
≡
(
−
(
M
%
x
)
⌊
M
x
⌋
−
1
)
−
1
(
m
o
d
M
)
x^{-1}\equiv \left(-\left(M\%x\right) \left\lfloor\frac {M}{x}\right\rfloor^{-1}\right)^{-1}\pmod M
x−1≡(−(M%x)⌊xM⌋−1)−1(modM)
我们知道
(
x
y
)
−
1
≡
x
−
1
y
−
1
(xy)^{-1}\equiv x^{-1}y^{-1}
(xy)−1≡x−1y−1,还知道
(
−
1
)
−
1
≡
1
(-1)^{-1}\equiv 1
(−1)−1≡1,还知道
(
x
−
1
)
−
1
≡
x
\left({x^{-1}}\right)^{-1}\equiv x
(x−1)−1≡x,因此:
x
−
1
≡
−
(
M
%
x
)
−
1
⌊
M
x
⌋
(
m
o
d
M
)
x^{-1}\equiv -\left(M\%x\right)^{-1} \left\lfloor\frac {M}{x}\right\rfloor\pmod M
x−1≡−(M%x)−1⌊xM⌋(modM)
而 M % x M\%x M%x的逆元早就求出来了,因此是可以做的。
inv[0]=inv[1]=1;
for(int i=2;i<=N;i++) (inv[i]=(M-1)*(M/i)%M*inv[M%i])%=M;
互为逆元
对于
m
⊥
x
m\perp x
m⊥x,则存在逆元:
x
⋅
x
−
1
≡
1
(
m
o
d
m
)
x\cdot x^{-1}\equiv 1\pmod m
x⋅x−1≡1(modm)
因此同余方程转不定方程:
x
⋅
x
−
1
+
m
⋅
y
=
1
x\cdot x^{-1}+m\cdot y=1
x⋅x−1+m⋅y=1
最后求出的 x − 1 x^{-1} x−1即为 x x x模 m m m的逆元,那么求出的 y y y是什么呢?
不难发现, y ≡ m − 1 ( m o d x ) y\equiv m^{-1}\pmod x y≡m−1(modx)
这个现象本身就十分有趣了,且在一种中国剩余定理的方法内会用到。
事实上,这还有个高级版本:
x
⋅
x
−
1
+
y
⋅
y
−
1
=
c
x\cdot x^{-1}+y\cdot y^{-1}=c
x⋅x−1+y⋅y−1=c
则:
x
⋅
x
−
1
≡
c
(
m
o
d
y
)
x\cdot x^{-1}\equiv c\pmod y
x⋅x−1≡c(mody)
y
⋅
y
−
1
≡
c
(
m
o
d
x
)
y\cdot y^{-1}\equiv c\pmod x
y⋅y−1≡c(modx)
x
⋅
x
−
1
≡
c
(
m
o
d
y
−
1
)
x\cdot x^{-1}\equiv c\pmod{y^{-1}}
x⋅x−1≡c(mody−1)
y
⋅
y
−
1
≡
c
(
m
o
d
x
−
1
)
y\cdot y^{-1}\equiv c\pmod{x^{-1}}
y⋅y−1≡c(modx−1)
后记
于是皆大欢喜。