Skip to content

初等数论 第三章 同余方程

同余式

mZ+,f(x)=anxn+an1xn1++a1x+a00modm\forall m \in \Z^+,\\ f(x) = a_n x^n + a_{n-1} x^{n-1} + \dots + a_1x + a_0 \equiv 0 \mod m

mm 的同余式

如果 manm \nmid a_nnnf(x)f(x) 的次数 degf\deg f,而 f(x)f(x) 称为 mmnn 次同余式

如果我们能找到一个解 aZa \in \Z,那么所有满足 aamodma' \equiv a \mod maa' 都是它的解 。

Ca={aaZ,aamodm}C_a = \{a'\mid a\in \Z, a' \equiv a \mod m\}

IMPORTANT

剩余类中的所有解看作一个解,用 xamodmx \equiv a \mod m 规范表述 。

什么时候看作不同的解呢?

a1,a2a_1, a_2 都是同余式的解,且它们对模 mm 不同余(即 a1modma2modma_1 \mod m \neq a_2 \mod m 时) ,称 a1,a2a_1, a_2 为不同的解。

解数:模 mm 同余式的解数是所有对模 mm 两两不同余的解的个数,它至多为 mm

一次同余式

定理mZ+,aZm \in \Z^+, a \in \Z 一次同余式 ax1modmax \equiv 1 \mod m 有解 (a,m)=1\lrArr (a,m)=1 且在有解时该解是唯一的 。

证明

存在性

(a,m)=1sa+tm=1(扩展欧几里得算法)sa1(modm)(m)xs(modm) 是 ax1(modm) 的一个解假设还有解 x, 则 a(xx)0(modm)因为 (a,m)=1, 所以 m(xx),即 xx(modm)则还在同一个剩余系内,视为一个解. (唯一性得证)(a,m)=1 \rArr sa+tm=1 \quad (\text{扩展欧几里得算法})\\ sa \equiv 1 \pmod m \quad (\text{模} m)\\ \rArr x \equiv s \pmod m \text{ 是 } ax \equiv 1 \pmod m \text{ 的一个解} \\ \text{假设还有解 } x', \text{ 则 } a(x'-x) \equiv 0 \pmod m \\ \text{因为 } (a,m)=1, \text{ 所以 } m \mid (x'-x) \text{,即 } x' \equiv x \pmod m \\ \text{则还在同一个剩余系内,视为一个解. (唯一性得证)}

必要性

如果同余式 ax1modmax \equiv 1 \mod m 有解 xx0(modm)x \equiv x_0 \pmod m,则存在整数 qq 使得 ax0=1+qmax_0 = 1 + qm,即 ax0qm=1ax_0 - qm = 1 ,因此有 (a,m)=1(a,m)=1

定理mZ+,ma,d=(a,m)m \in \Z^+, m \nmid a, d = (a,m)axbmodmax \equiv b \mod m 有解 \lrArr dbd \mid b 。且在有解时解数必为 dd

证明

\Rightarrow (必要性)

axbmodmax \equiv b \mod m 有解 xx0(modm)x \equiv x_0 \pmod m 意味着 m(ax0b)m \mid (ax_0 - b) 。 因为 dmd \mid mm(ax0b)m \mid (ax_0 - b),所以 d(ax0b)d \mid (ax_0 - b) 。 又因为 dad \mid a,所以 dax0d \mid ax_0 。 因此 d(ax0(ax0b))d \mid (ax_0 - (ax_0 - b)),即 dbd \mid b

\Leftarrow (充分性)

d=(a,m)d=(a,m)dbd \mid b。 因为 (ad,md)=1(\frac{a}{d}, \frac{m}{d}) = 1,存在整数 s,ts, t 使得 sad+tmd=1s \cdot \frac{a}{d} + t \cdot \frac{m}{d} = 1 。 两边同乘以 bd\frac{b}{d}sadbd+tmdbd=bds \cdot \frac{a}{d} \cdot \frac{b}{d} + t \cdot \frac{m}{d} \cdot \frac{b}{d} = \frac{b}{d}a(sbd)+m(tbd)=ba \cdot (s \cdot \frac{b}{d}) + m \cdot (t \cdot \frac{b}{d}) = ba(sbd)b(modm)a \cdot (s \cdot \frac{b}{d}) \equiv b \pmod m 。 这说明 xsbd(modm)x \equiv s \cdot \frac{b}{d} \pmod m 是一个解 。

求解的一般方法

x0=sbdx_0 = s \cdot \frac{b}{d} 是一个特解,则 axbmodmax \equiv b \mod m 的全部解为 :

xx0+kmdmodm,(k=0,1,,d1)x \equiv x_0 + k \cdot \frac{m}{d} \mod m, \quad (k = 0, 1, \dots, d-1)

代入特解的表达式:

xsbd+kmdmodm,(k=0,1,,d1)x \equiv s \cdot \frac{b}{d} + k \cdot \frac{m}{d} \mod m, \quad (k = 0, 1, \dots, d-1)

逆元

aa 是模 mm 的简化剩余 a\lrArr a 是模 mm 的可逆元 。

定义:对于 mZ+,aZm \in \Z^+, a \in \Z,如果存在 a0Za_0 \in \Z 使得 aa01modma a_0 \equiv 1 \mod m,则称 aa 是模 mm 的可逆元,并将 a0a_0 称为 aamm 的逆元,记作 a1(modm)a^{-1} \pmod m

性质aamm 的逆元存在当且仅当 (a,m)=1(a,m)=1

孙子定理(中国剩余定理)

解一次同余方程组:

{  f1(x)0modm1  f2(x)0modm2    fn(x)0modmn\begin{cases}     f_1(x) \equiv 0 \mod m_1\\     f_2(x) \equiv 0 \mod m_2\\     \dots\\     f_n(x) \equiv 0 \mod m_n \end{cases}

对于两两互素的 m1,m2,mkZ+,b1,b2,,bkZm_1, m_2, \dots m_k \in \Z^+, b_1, b_2, \dots, b_k \in \Z 则下面的一次同余方程组有解 ,且解在模 m1m2mkm_1 m_2 \dots m_k 下的意义唯一 :

{xb1modm1xb2modm2xbkmodmk \begin{cases} x \equiv b_1 \mod m_1\\ x \equiv b_2 \mod m_2\\ \dots\\ x \equiv b_k \mod m_k\\   \end{cases}

其解的表达式

m=i=1kmi,Mj=mmj,MjMj1modmj(其中 Mj 是 Mj 模 mj 的逆元)(j=1,2,k)m = \prod_{i=1}^{k} m_i,\\ M_j = \frac{m}{m_j}, \quad M_j'M_j \equiv 1 \mod m_j \quad (\text{其中 } M_j' \text{ 是 } M_j \text{ 模 } m_j \text{ 的逆元}) \\ (j = 1, 2, \dotsb k)\\

则解为:

xi=1kMiMibimodmx \equiv \sum_{i=1}^{k} M_i'M_ib_i \mod m

这是一个构造式的解。

证明中国剩余定理

唯一性证明

rrss 都是同余方程组的解 。

{rbimodmisbimodmi    rsmodmi,i=1,2,,k\begin{cases} r \equiv b_i \mod m_i\\ s \equiv b_i \mod m_i \end{cases} \implies r \equiv s \mod m_i, \quad \forall i=1, 2, \dots, k

因此 mi(rs)m_i \mid (r-s),即 rsr-s 是所有 mim_i 的公倍数 。

rsmod[m1,m2,,mk]r \equiv s \mod [m_1, m_2, \dots, m_k]

由于 m1,m2,,mkm_1, m_2, \dots, m_k 两两互素,它们的最小公倍数等于它们的乘积,即 [m1,m2,,mk]=m1m2mk=m[m_1, m_2, \dots, m_k] = m_1 m_2 \dots m_k = m 。 故 rsmodmr \equiv s \mod m ,解在模 mm 的意义下是唯一的。

构造式证明(存在性)

构造的解 x0=i=1kMiMibix_0 = \sum_{i=1}^{k} M_i'M_ib_i 满足方程组:

对于任意一个 mjm_j

x0i=1kMiMibi(modmj)x_0 \equiv \sum_{i=1}^{k} M_i'M_ib_i \pmod{m_j}

由于当 iji \neq j 时,mjMim_j \mid M_i (因为 Mi=m/miM_i = m/m_i),所以 Mi0(modmj)M_i \equiv 0 \pmod{m_j} 。 只有 i=ji=j 的项不为零:

x0MjMjbj(modmj)x_0 \equiv M_j'M_jb_j \pmod{m_j}

因为 MjMj1(modmj)M_j'M_j \equiv 1 \pmod{m_j},所以

x01bjbj(modmj)x_0 \equiv 1 \cdot b_j \equiv b_j \pmod{m_j}

这表明 x0x_0 是方程组的一个解 。

NOTE

课纲要求:了解中国剩余定理的递归证明

递归式证明

xi1x_{i-1} 是前 i1i-1 个同余式解,即 xxi1(modNi1)x \equiv x_{i-1} \pmod{N_{i-1}},其中 Ni1=m1m2mi1N_{i-1} = m_1 m_2 \dots m_{i-1} 。 现在求解包含第 ii 个同余式的方程组:

{xxi1modNi1xbimodmi\begin{cases} x \equiv x_{i-1} \mod N_{i-1}\\ x \equiv b_i \mod m_i \end{cases}

由第一个方程,设 x=xi1+yi1Ni1x = x_{i-1} + y_{i-1} \cdot N_{i-1} 。 代入第二个方程:

xi1+yi1Ni1bi(modmi)    yi1Ni1bixi1(modmi)x_{i-1} + y_{i-1} \cdot N_{i-1} \equiv b_i \pmod{m_i} \\ \implies y_{i-1} \cdot N_{i-1} \equiv b_i - x_{i-1} \pmod{m_i}

由于 (Ni1,mi)=1(N_{i-1}, m_i) = 1 (因为 mjm_j 两两互素),所以 Ni1N_{i-1}mim_i 的逆元 Ni1N_{i-1}' 存在,满足 Ni1Ni11(modmi)N_{i-1} \cdot N_{i-1}' \equiv 1 \pmod{m_i} 。 同乘以 Ni1N_{i-1}'

yi1(bixi1)Ni1(modmi)y_{i-1} \equiv (b_i - x_{i-1}) \cdot N_{i-1}' \pmod{m_i}

yi1(0)y_{i-1}^{(0)} 是这个解的某个代表元,则 yi1=yi1(0)+qmiy_{i-1} = y_{i-1}^{(0)} + q m_i。 代回 xx 的表达式,得到第 ii 个解 xix_i

xi=xi1+yi1(0)Ni1(modm1m2mi)x_i = x_{i-1} + y_{i-1}^{(0)} \cdot N_{i-1} \pmod{m_1 m_2 \dots m_i}

这样就将 i1i-1 个方程的解扩展到了 ii 个方程的解,重复 kk 次即可得到最终解 xkx_k

中国剩余定理的应用

快速计算大整数取模

xx 是一个大整数,要求计算它模 mm 的值,我们可以把 mm 拆成两两互素的 m1,m2,mkm_1, m_2, \dots m_k,建立一个同余方程组:

{  xb1modm1  xb2modm2    xbkmodmk\begin{cases}     x \equiv b_1 \mod m_1\\     x \equiv b_2 \mod m_2\\     \dots\\     x \equiv b_k \mod m_k \end{cases}

求解这个方程组就可以得到 xmodmx \mod m 的解。

这么做的好处:

  • 减少计算复杂度:对于模 ll bit 整数的质数运算,从传统的 O((2l)3)O((2l)^3) 复杂度可以减少到 O(2l3)O(2l^3) 复杂度,减少了常数 。
  • 并行计算可能性:将大数模运算分解成多个小模运算,可以利用并行计算提高效率 。

计算样例:计算 21000000mod772^{1000000} \mod 77m=77=7×11m = 77 = 7 \times 11,其中 (7,11)=1(7, 11)=1。 转化为同余方程组:

{x21000000mod7x21000000mod11\begin{cases} x \equiv 2^{1000000} \mod 7\\ x \equiv 2^{1000000} \mod 11 \end{cases}

  1. 计算 b1=21000000mod7b_1 = 2^{1000000} \mod 7: 由费马小定理,261mod72^6 \equiv 1 \mod 71000000=6×166666+41000000 = 6 \times 166666 + 421000000=(26)16666624116666616162mod72^{1000000} = (2^6)^{166666} \cdot 2^4 \equiv 1^{166666} \cdot 16 \equiv 16 \equiv 2 \mod 7b1=2b_1 = 2
  2. 计算 b2=21000000mod11b_2 = 2^{1000000} \mod 11: 由费马小定理,2101mod112^{10} \equiv 1 \mod 111000000=10×1000001000000 = 10 \times 10000021000000=(210)10000011000001mod112^{1000000} = (2^{10})^{100000} \equiv 1^{100000} \equiv 1 \mod 11b2=1b_2 = 1

现在解方程组:

{x2mod7(m1=7,b1=2)x1mod11(m2=11,b2=1)\begin{cases} x \equiv 2 \mod 7 \quad (m_1=7, b_1=2)\\ x \equiv 1 \mod 11 \quad (m_2=11, b_2=1) \end{cases}

m=77,M1=11,M2=7m = 77, M_1 = 11, M_2 = 7 。 求逆元: M1M11modm1    11M11mod7    4M11mod7M_1' M_1 \equiv 1 \mod m_1 \implies 11 M_1' \equiv 1 \mod 7 \implies 4 M_1' \equiv 1 \mod 7. 解得 M1=2M_1'=2M2M21modm2    7M21mod11M_2' M_2 \equiv 1 \mod m_2 \implies 7 M_2' \equiv 1 \mod 11. 解得 M2=8M_2'=8 。 解为:

xM1M1b1+M2M2b2modmx2112+871mod77x44+56mod77x100mod77x23mod77x \equiv M_1' M_1 b_1 + M_2' M_2 b_2 \mod m \\ x \equiv 2 \cdot 11 \cdot 2 + 8 \cdot 7 \cdot 1 \mod 77 \\ x \equiv 44 + 56 \mod 77 \\ x \equiv 100 \mod 77 \\ x \equiv 23 \mod 77

因此 21000000mod77=232^{1000000} \mod 77 = 23

高次同余方程

技巧 3-4 恒等式

h(x)0(modm)h(x) \equiv 0 \pmod mmm 个解。

f(x)=q(x)h(x)+r(x)b(modm)r(x)b(modm)f(x) = q(x)h(x) + r(x) \equiv b \pmod m\\ \rArr\\ r(x) \equiv b \pmod m

如:

  2x7x53x3+6x+10(mod5)  2x7x53x3+6x+1=(2x21)(x5x)+(x3+5x+1)  2x7x53x3+6x+1x3+5x+1x3+1(mod5)\begin{align*}     2x^7 - x^5 - 3x^3 + 6x + 1 &\equiv 0 \pmod 5\\     2x^7 - x^5 - 3x^3 + 6x + 1 &= (2x^2 - 1)(x^5 - x) + (-x^3 + 5x + 1)\\     2x^7 - x^5 - 3x^3 + 6x + 1 & \equiv -x^3 + 5x + 1 \equiv -x^3 + 1 \pmod 5 \end{align*}

(注:这里利用了费马小定理推论 xpx0(modp)x^p - x \equiv 0 \pmod p

技巧 3-5 设 ddmm 的正因子

{  mf(x)  dmdf(x)\begin{cases}     m \mid f(x)\\     d \mid m \end{cases} \rArr d \mid f(x)

f(x)0(modm) 有解 f(x)0(modd) 有解f(x) \equiv 0 \pmod m \text{ 有解 } \rArr f(x) \equiv 0 \pmod d \text{ 有解}

这个结论可以用来证明方程无解(逆否命题):

f(x)0(modd) 无解 f(x)0(modm) 无解f(x) \equiv 0 \pmod d \text{ 无解 } \rArr f(x) \equiv 0 \pmod m \text{ 无解}

多项式的 gcd\gcd

回顾多项式的除法和多项式 gcd\gcd,在求解模素数 pp 的同余方程时,可以利用恒等式进行降次: 定理:对于 f(x)(modp)f(x) \pmod p,存在多项式 q(x),r(x)q(x), r(x) 使得 deg(r(x))<p\deg(r(x)) < p 且 :

f(x)=(xpx)q(x)+r(x)f(x) = (x^p - x)q(x) + r(x)

从而有:

f(x)0(modp)r(x)0(modp)f(x) \equiv 0 \pmod p \lrArr r(x) \equiv 0 \pmod p

解的个数

分解 mmm=m1m2mkm = m_1 m_2 \dots m_k,且 mim_i 两两互素:

f(x)0(modm)f(x) \equiv 0 \pmod m

{  f(x)0(modm)1  f(x)0(modm)2    f(x)0(modm)k\begin{cases}     f(x) \equiv 0 \pmod m_1\\     f(x) \equiv 0 \pmod m_2\\     \dots\\     f(x) \equiv 0 \pmod m_k \end{cases}

等价。前者的解数 TT 为后者的每一条方程的解数 TiT_i 的乘积:

T=i=1kTiT = \prod_{i=1}^k T_i

充分性

对于同余方程组的每一个解 (c1,c2,,ck)\left(c_1, c_2, \dots, c_k\right),其中 cic_if(x)0(modmi)f(x) \equiv 0 \pmod{m_i} 的解。根据中国剩余定理,存在唯一的 x0(modm)x_0 \pmod m 满足 x0ci(modmi)x_0 \equiv c_i \pmod{m_i} 。 对于这个 x0x_0

f(x0)f(ci)0(modmi),i=1,,kf(x_0) \equiv f(c_i) \equiv 0 \pmod{m_i}, \quad \forall i=1, \dots, k

从而 f(x0)0(modm)f(x_0) \equiv 0 \pmod m ,因此 x0x_0 是原方程的解。解数是所有分量方程解数的乘积。

必要性

x0x_0f(x)0(modm)f(x) \equiv 0 \pmod m 的解,即 mf(x0)m \mid f(x_0) 。 由于 mimm_i \mid m,所以 mif(x0)m_i \mid f(x_0),即 f(x0)0(modmi)f(x_0) \equiv 0 \pmod{m_i} 。 因此 x0x_0 也是方程组 {f(x)0(modm)1\begin{cases} f(x) \equiv 0 \pmod m_1 \\ \dots \end{cases} 的解。 同时,如果 x1≢x2(modm)x_1 \not\equiv x_2 \pmod m,那么它们必有一对 mim_i 不同余 。因此,原方程的每个解都对应方程组的一个唯一的解组合。

定理 (模素数 pp)

如果 xc1,c2,,ck(modp)x\equiv c_1, c_2 ,\dots, c_k \pmod pf(x)0(modp)f(x) \equiv 0 \pmod p 的不同解,则:

f(x)i=1k(xci)fk(x)(modp)f(x) \equiv \prod_{i=1}^k (x-c_i) f_k(x) \pmod p

着告诉我们 解的个数 kk 至多为多项式的次数 nn,即 kmin(degf,p)k \leq \min(\deg f, p)

推论

次数小于 pp 的同余方程 f(x)0(modp)f(x) \equiv 0 \pmod p 的解数为 pp 当且仅当 pf(x)p \mid f(x) 的每一个系数。

求解模为素数幂的同余方程

m=i=1kpiαif(x)0(modm)m = \prod_{i=1}^{k} p_i^{\alpha_i} \rArr f(x) \equiv 0 \pmod m

根据同余式的分解性,求解 f(x)0(modm)f(x) \equiv 0 \pmod m 等价于求解 f(x)0(modpiαi)f(x) \equiv 0 \pmod{p_i^{\alpha_i}} 的系统 。

求解 f(x)0(modpα)f(x) \equiv 0 \pmod {p^{\alpha}},通常采用 Hensel's Lemma (汉斯尔引理),从模 pp 的解逐步“提升”到模 p2,,pαp^2, \dots, p^{\alpha} 的解。

基本思路 (解的提升)

  1. 首先求出 f(x)0(modp)f(x) \equiv 0 \pmod p 的解 xc(modp)x \equiv c \pmod p
  2. 假设我们已求得 f(x)0(modpi1)f(x) \equiv 0 \pmod {p^{i-1}} 的解 xci1(modpi1)x \equiv c_{i-1} \pmod {p^{i-1}}
  3. 我们寻找 f(x)0(modpi)f(x) \equiv 0 \pmod {p^i} 的解 xci(modpi)x \equiv c_i \pmod {p^i},其中 cic_i 满足 ci=ci1+kpi1c_i = c_{i-1} + k \cdot p^{i-1},其中 k{0,1,,p1}k \in \{0, 1, \dots, p-1\}
  4. cic_i 代入 f(x)0(modpi)f(x) \equiv 0 \pmod {p^i} 并进行泰勒展开,利用 f(ci1)0(modpi1)f(c_{i-1}) \equiv 0 \pmod {p^{i-1}} 的条件,可以得到关于 kk 的一个线性同余式:

    f(ci1)kf(ci1)pi1(modp)f'(c_{i-1}) \cdot k \equiv \frac{-f(c_{i-1})}{p^{i-1}} \pmod p

  5. 根据 f(ci1)(modp)f'(c_{i-1}) \pmod p 的值,分情况讨论 kk 的解(00 个, 11 个,或 pp 个解),从而确定 cic_i 的个数,然后重复此过程直到求得 (modpα)\pmod {p^\alpha} 的解 。

CC BY-NC-SA 4.0