同余式
∀m∈Z+,f(x)=anxn+an−1xn−1+⋯+a1x+a0≡0modm
为模 m 的同余式 。
如果 m∤an 称 n 为 f(x) 的次数 degf,而 f(x) 称为 模 m 的 n 次同余式 。
如果我们能找到一个解 a∈Z,那么所有满足 a′≡amodm 的 a′ 都是它的解 。
Ca={a′∣a∈Z,a′≡amodm}
剩余类中的所有解看作一个解,用 x≡amodm 规范表述 。
什么时候看作不同的解呢?
当 a1,a2 都是同余式的解,且它们对模 m 不同余(即 a1modm=a2modm 时) ,称 a1,a2 为不同的解。
解数:模 m 同余式的解数是所有对模 m 两两不同余的解的个数,它至多为 m 。
一次同余式
定理 设 m∈Z+,a∈Z 一次同余式 ax≡1modm 有解 ⇔(a,m)=1 且在有解时该解是唯一的 。
证明
存在性
(a,m)=1⇒sa+tm=1(扩展欧几里得算法)sa≡1(modm)(模m)⇒x≡s(modm) 是 ax≡1(modm) 的一个解假设还有解 x′, 则 a(x′−x)≡0(modm)因为 (a,m)=1, 所以 m∣(x′−x),即 x′≡x(modm)则还在同一个剩余系内,视为一个解. (唯一性得证)
必要性
如果同余式 ax≡1modm 有解 x≡x0(modm),则存在整数 q 使得 ax0=1+qm,即 ax0−qm=1 ,因此有 (a,m)=1 。
定理 设 m∈Z+,m∤a,d=(a,m) 则 ax≡bmodm 有解 ⇔ d∣b 。且在有解时解数必为 d 。
证明
⇒ (必要性)
ax≡bmodm 有解 x≡x0(modm) 意味着 m∣(ax0−b) 。
因为 d∣m 且 m∣(ax0−b),所以 d∣(ax0−b) 。
又因为 d∣a,所以 d∣ax0 。
因此 d∣(ax0−(ax0−b)),即 d∣b 。
⇐ (充分性)
设 d=(a,m) 且 d∣b。
因为 (da,dm)=1,存在整数 s,t 使得 s⋅da+t⋅dm=1 。
两边同乘以 db:
s⋅da⋅db+t⋅dm⋅db=db
a⋅(s⋅db)+m⋅(t⋅db)=b
a⋅(s⋅db)≡b(modm) 。
这说明 x≡s⋅db(modm) 是一个解 。
求解的一般方法
设 x0=s⋅db 是一个特解,则 ax≡bmodm 的全部解为 :
x≡x0+k⋅dmmodm,(k=0,1,…,d−1)
代入特解的表达式:
x≡s⋅db+k⋅dmmodm,(k=0,1,…,d−1)
逆元
a 是模 m 的简化剩余 ⇔a 是模 m 的可逆元 。
定义:对于 m∈Z+,a∈Z,如果存在 a0∈Z 使得 aa0≡1modm,则称 a 是模 m 的可逆元,并将 a0 称为 a 模 m 的逆元,记作 a−1(modm) 。
性质: a 模 m 的逆元存在当且仅当 (a,m)=1 。
孙子定理(中国剩余定理)
解一次同余方程组:
⎩⎨⎧ f1(x)≡0modm1 f2(x)≡0modm2 … fn(x)≡0modmn
对于两两互素的 m1,m2,…mk∈Z+,b1,b2,…,bk∈Z 则下面的一次同余方程组有解 ,且解在模 m1m2…mk 下的意义唯一 :
⎩⎨⎧x≡b1modm1x≡b2modm2…x≡bkmodmk
其解的表达式
令
m=i=1∏kmi,Mj=mjm,Mj′Mj≡1modmj(其中 Mj′ 是 Mj 模 mj 的逆元)(j=1,2,⋯k)
则解为:
x≡i=1∑kMi′Mibimodm
这是一个构造式的解。
证明中国剩余定理
唯一性证明
设 r 和 s 都是同余方程组的解 。
{r≡bimodmis≡bimodmi⟹r≡smodmi,∀i=1,2,…,k
因此 mi∣(r−s),即 r−s 是所有 mi 的公倍数 。
r≡smod[m1,m2,…,mk]
由于 m1,m2,…,mk 两两互素,它们的最小公倍数等于它们的乘积,即 [m1,m2,…,mk]=m1m2…mk=m 。
故 r≡smodm ,解在模 m 的意义下是唯一的。
构造式证明(存在性)
构造的解 x0=∑i=1kMi′Mibi 满足方程组:
对于任意一个 mj:
x0≡i=1∑kMi′Mibi(modmj)
由于当 i=j 时,mj∣Mi (因为 Mi=m/mi),所以 Mi≡0(modmj) 。
只有 i=j 的项不为零:
x0≡Mj′Mjbj(modmj)
因为 Mj′Mj≡1(modmj),所以
x0≡1⋅bj≡bj(modmj)
这表明 x0 是方程组的一个解 。
递归式证明
设 xi−1 是前 i−1 个同余式解,即 x≡xi−1(modNi−1),其中 Ni−1=m1m2…mi−1 。
现在求解包含第 i 个同余式的方程组:
{x≡xi−1modNi−1x≡bimodmi
由第一个方程,设 x=xi−1+yi−1⋅Ni−1 。
代入第二个方程:
xi−1+yi−1⋅Ni−1≡bi(modmi)⟹yi−1⋅Ni−1≡bi−xi−1(modmi)
由于 (Ni−1,mi)=1 (因为 mj 两两互素),所以 Ni−1 模 mi 的逆元 Ni−1′ 存在,满足 Ni−1⋅Ni−1′≡1(modmi) 。
同乘以 Ni−1′:
yi−1≡(bi−xi−1)⋅Ni−1′(modmi)
设 yi−1(0) 是这个解的某个代表元,则 yi−1=yi−1(0)+qmi。
代回 x 的表达式,得到第 i 个解 xi:
xi=xi−1+yi−1(0)⋅Ni−1(modm1m2…mi)
这样就将 i−1 个方程的解扩展到了 i 个方程的解,重复 k 次即可得到最终解 xk 。
中国剩余定理的应用
快速计算大整数取模
若 x 是一个大整数,要求计算它模 m 的值,我们可以把 m 拆成两两互素的 m1,m2,…mk,建立一个同余方程组:
⎩⎨⎧ x≡b1modm1 x≡b2modm2 … x≡bkmodmk
求解这个方程组就可以得到 xmodm 的解。
这么做的好处:
- 减少计算复杂度:对于模 l bit 整数的质数运算,从传统的 O((2l)3) 复杂度可以减少到 O(2l3) 复杂度,减少了常数 。
- 并行计算可能性:将大数模运算分解成多个小模运算,可以利用并行计算提高效率 。
计算样例:计算 21000000mod77 。
m=77=7×11,其中 (7,11)=1。
转化为同余方程组:
{x≡21000000mod7x≡21000000mod11
- 计算 b1=21000000mod7:
由费马小定理,26≡1mod7。
1000000=6×166666+4 。
21000000=(26)166666⋅24≡1166666⋅16≡16≡2mod7。
b1=2 。
- 计算 b2=21000000mod11:
由费马小定理,210≡1mod11。
1000000=10×100000 。
21000000=(210)100000≡1100000≡1mod11。
b2=1 。
现在解方程组:
{x≡2mod7(m1=7,b1=2)x≡1mod11(m2=11,b2=1)
m=77,M1=11,M2=7 。
求逆元:
M1′M1≡1modm1⟹11M1′≡1mod7⟹4M1′≡1mod7. 解得 M1′=2 。
M2′M2≡1modm2⟹7M2′≡1mod11. 解得 M2′=8 。
解为:
x≡M1′M1b1+M2′M2b2modmx≡2⋅11⋅2+8⋅7⋅1mod77x≡44+56mod77x≡100mod77x≡23mod77
因此 21000000mod77=23 。
高次同余方程
技巧 3-4 恒等式
若 h(x)≡0(modm) 有 m 个解。
f(x)=q(x)h(x)+r(x)≡b(modm)⇒r(x)≡b(modm)
如:
2x7−x5−3x3+6x+1 2x7−x5−3x3+6x+1 2x7−x5−3x3+6x+1≡0(mod5)=(2x2−1)(x5−x)+(−x3+5x+1)≡−x3+5x+1≡−x3+1(mod5)
(注:这里利用了费马小定理推论 xp−x≡0(modp))
技巧 3-5 设 d 是 m 的正因子
{ m∣f(x) d∣m⇒d∣f(x)
f(x)≡0(modm) 有解 ⇒f(x)≡0(modd) 有解
这个结论可以用来证明方程无解(逆否命题):
f(x)≡0(modd) 无解 ⇒f(x)≡0(modm) 无解
多项式的 gcd
回顾多项式的除法和多项式 gcd,在求解模素数 p 的同余方程时,可以利用恒等式进行降次:
定理:对于 f(x)(modp),存在多项式 q(x),r(x) 使得 deg(r(x))<p 且 :
f(x)=(xp−x)q(x)+r(x)
从而有:
f(x)≡0(modp)⇔r(x)≡0(modp)
解的个数
分解 m 若 m=m1m2…mk,且 mi 两两互素:
f(x)≡0(modm)
与
⎩⎨⎧ f(x)≡0(modm)1 f(x)≡0(modm)2 … f(x)≡0(modm)k
等价。前者的解数 T 为后者的每一条方程的解数 Ti 的乘积:
T=i=1∏kTi
充分性
对于同余方程组的每一个解 (c1,c2,…,ck),其中 ci 是 f(x)≡0(modmi) 的解。根据中国剩余定理,存在唯一的 x0(modm) 满足 x0≡ci(modmi) 。
对于这个 x0:
f(x0)≡f(ci)≡0(modmi),∀i=1,…,k
从而 f(x0)≡0(modm) ,因此 x0 是原方程的解。解数是所有分量方程解数的乘积。
必要性
设 x0 是 f(x)≡0(modm) 的解,即 m∣f(x0) 。
由于 mi∣m,所以 mi∣f(x0),即 f(x0)≡0(modmi) 。
因此 x0 也是方程组 {f(x)≡0(modm)1… 的解。
同时,如果 x1≡x2(modm),那么它们必有一对 mi 不同余 。因此,原方程的每个解都对应方程组的一个唯一的解组合。
定理 (模素数 p)
如果 x≡c1,c2,…,ck(modp) 是 f(x)≡0(modp) 的不同解,则:
f(x)≡i=1∏k(x−ci)fk(x)(modp)
着告诉我们 解的个数 k 至多为多项式的次数 n,即 k≤min(degf,p)。
推论
次数小于 p 的同余方程 f(x)≡0(modp) 的解数为 p 当且仅当 p∣f(x) 的每一个系数。
求解模为素数幂的同余方程
m=i=1∏kpiαi⇒f(x)≡0(modm)
根据同余式的分解性,求解 f(x)≡0(modm) 等价于求解 f(x)≡0(modpiαi) 的系统 。
求解 f(x)≡0(modpα),通常采用 Hensel’s Lemma (汉斯尔引理),从模 p 的解逐步“提升”到模 p2,…,pα 的解。
基本思路 (解的提升):
- 首先求出 f(x)≡0(modp) 的解 x≡c(modp) 。
- 假设我们已求得 f(x)≡0(modpi−1) 的解 x≡ci−1(modpi−1)。
- 我们寻找 f(x)≡0(modpi) 的解 x≡ci(modpi),其中 ci 满足 ci=ci−1+k⋅pi−1,其中 k∈{0,1,…,p−1}。
- 将 ci 代入 f(x)≡0(modpi) 并进行泰勒展开,利用 f(ci−1)≡0(modpi−1) 的条件,可以得到关于 k 的一个线性同余式:
f′(ci−1)⋅k≡pi−1−f(ci−1)(modp)
- 根据 f′(ci−1)(modp) 的值,分情况讨论 k 的解(0 个, 1 个,或 p 个解),从而确定 ci 的个数,然后重复此过程直到求得 (modpα) 的解 。