线性同余方程组 欧拉定理 欧几里得算法 取模运算 同余

浅谈线性同余方程组

作者:高欣宇,肖志昊(排名不分先后)

摘要

古人有云:有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?

在本篇文章中,为了解决这个问题,我们会了解到最基本的模运算,并推导一些取模意义下的定理,最后解决此问题——求解线性同余方程组。

模运算

在了解线性同余方程组之前,我们需要有一些前置知识。例如“同余”代表此方程组在取模意义下成立,那么我们需要先了解模运算。

定义

我们令 a mod b=aa/b×b ,那么 a mod b 就称为对 a 进行模 b 运算 ,mod 称为模运算

非正式地,可以将模 n 运算看作每个 x mod n 的值都用集合{0,1,2,,n1} 中的某个元素替代,使得 x(x mod n)=k×n,kZ ,我们在此只考虑 aZ,bZ

定理1:在 x,n 确定的情况下,x mod n 最多有一个解。

证明:

若有一个 k 使得 x(x mod n)=k×n (kZ) 并记此时的 x mod nm1

那么对于 k0>k,令 x mod n=m2 ,有m2=xk0×n

因为 k0>k,于是有 k0×nk×n+n,所以 m2x(xm1)n,即m2m1n

已知 m1[0,n1],那么 m1n[n,1],最后得出 m21,与 x mod n[0,n1] 不符。

同理,对于 k0<k,有 m3n ,与 x mod n[0,n1] 不符。得证。

定理2:在 x,n 确定的情况下,x mod n 至少有一个解。

证明:

x mod n 根据定义一共可能有{0,1,2,,n1} 一共 n1 种解。若使 x(x mod n)=k×n (kZ)k 等于 0,易得在 x[0,n1]x mod n=x,有解。根据定义得 (x+k×n) mod n=x mod n,故 [k×n,(k+1)×n1],kZ 有解,于是 x mod nZ 上恒有解,得证。

根据上述两个定理可得,x mod n 有唯一解。

定理3(a mod n+b mod n) mod n=(a+b) mod n

证明:

寻找 p1,p2 使得 a=k1×n+p1,b=k2×n+p2,k1k2Z 并且 p1p2[0,n1]。通过上面的定义和定理可以得知, p1,p2 就是 a mod n,b mod n,且是唯一的。

(a+b) mod n

=(k1×n+p1+k2×n+p2) mod n

=(p1+p2+(k1+k2)×n) mod n

=(a mod n+b mod n) mod n

定理4(a mod n×b mod n) mod n=(a×b) mod n

证明:

同上,寻找 p1,p2 使得 a=k1×n+p1,b=k2×n+p2,k1k2Z 并且 p1p2[0,n1]p1,p2 就是 a mod n,b mod n

(a×b) mod n

=[(k1×n+p1)×(k2×n+p2)] mod n

=(k1×p2×n+p1×k2×n+(k1×k2)×n2+p1×p2) mod n

=(a mod n×b mod n) mod n

以上,定理3可以通过 ab=a+(b) 的形式来证明取模意义下有 (a mod nb mod n) mod n=(ab) mod n。取模意义下不存在(a mod n÷b mod n) mod n=(a÷b) mod n

所以,我们在对同一个模数 m 取余的情况下,我们可以简单地把 x 替换为 x mod n ,使得这个式子在取模意义下依然成立,也就是说,在(对 m)取模的意义下,x=x mod m。事实上这就是后面会提到的同余,如果我们令 t=x mod m,那么就有 xt(modm),其中 表示同余,也就是在取模意义下的相等,x mod m=t mod m

扩展——有理数取模

上述的模运算是在 Z 上讨论的,我们可以将其扩展到 R 上。

具体地,对于有理数将其化成最简分数形式 pq ,而这个式子也可以表达为 p×q1,将 q1 看做 q 的乘法逆元(在后文会提到),简单地将 pq 的逆元进行乘法并取模,就得到了有理数取模的答案。

其他规律

分配律:
(a+b) mod p=(a mod p+b mod p) mod p
(ab) mod p=(a mod pb mod p) mod p
(ab) mod p=(a mod pb mod p) mod p
(ab) mod p=[(a mod p)b] mod p
[(a+b) mod pc] mod p=[(ac) mod p+(bc) mod p] mod p

结合律:
[(a+b) mod p+c] mod p=[a+(b+c) mod p] mod p
[(ab) mod pc] mod p=[a(bc) mod p] mod p

交换律:
(a+b) mod p=(b+a) mod p
(ab) mod p=(ba) mod p

欧几里得算法

这是一个如何求解最大公约数的方法。公式为:

gcd(a,b)=gcd(b,a%b)

ab均为正整数,保证a>b。函数gcd代表两个数的最大公约数。%mod 的另一种写法。

a1或者是b0时,a为当前两数的最大公约数。(利用递归的思想)

证明:

我们需要明确以下几点。首先,我们知道ab中一定包含他们的最大公约数d,那么a%b也包含他们的最大公约数d吗?既然ab都包含它们的最大公约数,那为什么公式不是gcd(a,b)=gcd(a,a%b)呢?

a%b的约数一定含有ab的最大公约数d

首先,我们设d=gcd(a,b),即设dab的最大公约数。那么我们可以将原式改写为gcd(ka×d,kb×d)(保证a大于b,下同)。因为这时候d已经是最大公约数了,所以此时kakb一定是互质的。接下来我们将gcd(b,a%b)a%b转换一下,变为(ka×d)%(kb×d)

我们再把取余换做减法(ka×d)tmax×(kb×d),这里的tmax表示最大的t使得t×(kb×d)小于等于(ka×d)成立。化简一下就会变成(katmax×kb)×d。很明显,a%b也含有ab的最大公约数d。并且a%b<ba,这样就缩小了范围。

公式gcd(a,b)=gcd(b,a%b)

我们接下来讨论公式gcd(a,b)=gcd(a,a%b)是否成立?

首先我们将a%b=(katmax×kb)×d中的(katmax×kb)替换为kr,那么a%b=kr×d,方便理解。

那么公式变为gcd(ka×d,kb×d)=gcd(kb×d,kr×d)。如果说kb不和kr互质,那么就不能成立了,因为此前我们已经设d为最大公约数了,那么如果不互质,那么d显然有更大的值。那究竟kbkr互质吗?

kbkr互质

反证法。首先我们有式子kr=katmax×kb,设kr不与kb互质,那么设他们的公因数为p

将原式转化为x×p=katmax×y×p,移项得到(x+tmax×y)×p=ka,观察式子发现此时ka包含因子p,然而我们上面假设的kb也含有因子p,这样kakb就不互质了,很明显违背了最开始的设定,故krkb不互质的假设不成立。

kakr不一定互质

此时我们反过来看gcd(a,b)=gcd(a,a%b),同样把他转换一下变为gcd(ka×d,kb×d)=gcd(ka×d,kr×d)。我们可以很容易够造出一组反例(还是保证a大于b)。

ka=5×7kb=2×3,带入原式得到gcd(5×7×d,2×3×d)=gcd(5×7×d,5×d),这很明显ka不与kr互质。

裴蜀定理

再让我们来看看裴蜀定理是什么:

对于给定的两个数ab,一定有两个数(xy)满足ax+by=gcd(a,b)

证明

我们还是将ab表示为pdqd,那么原式就为pxd+qyd=gcd(a,b)k
就可以看为(px+qy)=k,且一定有k成立。
我们这就证明了裴蜀定理

欧拉函数

定义

a,bN,若gcd(a,b)=1,则称a,b互质。对于三个数或更多个数的情况,我们把gcd(a,b,c)=1的情况称为a,b,c互质。把gcd(a,b)=gcd(a,c)=gcd(b,c)=1称为a,b,c两两互质。后者显然是一个更强的条件。

1N中与N互质的数的个数被称为欧拉函数,记为φ(N)

特别地 φ(1)=1

当 n 是质数的时候,显然有 φ(n)=n1

我们将N分解质因数可得:(pi为质因数)

N=p1c1p2c2p3c3···pmcm

则:

φ(N)=Np11p1p21p2···pm1pm=Np|N(11p)

公式推导:

利用容斥的思想,设pN的质因子,1Np的倍数有p,2p,3p,···,(N/p)p,共有(N/p)个。同理,若q也是N的质因子,则1Nq的倍数有(N/q)个。如果我们把这(N/p)+(N/q)个数去掉,那么pq的倍数被排除了两次,需要加回来一次。因此,1N中不含有共同质因子pq的个数为:

NNpNq+Npq=N(11p1q+1pq)=N(11p)(11q)

类似的,可以在N的全部因子上使用容斥原理,即可得到公式。

性质

φ(n)为积性函数,即当gcd(a,b)=1时,φ(ab)=φ(a)φ(b)

更多的性质有兴趣的同学可以上网搜索了解一下。

同余

定义:若整数a和整数b除以正整数m的余数相等,则称a,bm同余,记为$

同余类

定义:对于a[0,m1],集合{a+km}(kZ)的所有数模m同余,余数都是a。该集合称为一个模m的同余类,简记为a¯

剩余系

完全剩余系

定义:模m的同余类一共有m个,分别为0,1,2,···,m1。它们构成了m的完全剩余系。

简化剩余系

定义:1m中与m互质的数代表的同余类共有φ(m)个,它们构成了m的简化剩余系。例如,模10的简化剩余系为{1,3,7,9}

性质:简化剩余系关于模m乘法封闭。这是因为若a,b(1a,bm)m互质,则ab也不可能与m含有相同的质因子,即ab也与m互质。可以推出ab mod m也与m互质,通过反证法可得:

ab mod m=c,则有:ab=kmm+c

gcd(m,c)1cm不互质),则可以提出kmmc的公因数d,将原式转变为ab=d(km(m÷d)+(c÷d))。由该式可得abkmm+c有公共因子d,可得mab有公共因子d。又因为条件gcd(ab,m)=1abm互质),与结论不符合,所以gcd(m,c)=1mc互质)。

欧拉定理

定义

gcd(a,m)=1,则 aφ(m)1(modm)

证明

m的简化剩余系为{q1,q2,···,qφ(m)},对qi,qj,若aqiaqj(modm),则aqiaqj0(modm)(由同余式的性质可得),a(qiqj)0(modm)。又因为am互质,所以可得qiqj0(modm),推出qiqj(modm) 。由此可知,当qiqj时,aqiaqj(modm)

通过这个结论,我们可以构造出集合{aq1,aq2,···,aqφ(m)},由上面的结论可以知道集合{aq1 mod m,aq2 mod m,···,aqφ(m) mod m}中的元素两两不相同。

类似于简化剩余系中关于模m乘法封闭的推导过程。因为gcd(a,m)=1gcd(qi,m)=1,所以gcd(aqi,m)=1。令c=aqi mod m,有aqi=kmm+c,若gcd(m,c)1,则提出mc的公因数d,原式变为aqi=d(km(m÷d)+(c÷d)),可知等式两侧均有因数d。所以结论为aqim有公因数d,与条件gcd(aqi,m)=1不符合,所以gcd(c,m)必然为1cm必然互质)。

根据以上结论:集合{aq1 mod m,aq2 mod m,···,aqφ(m) mod m}中有φ(m)个元素,且两两不相同,并且每一个元素都与m互质。可以推导出集合{aq1,aq2,···,aqφ(m)}也可以代表模m的同余类。且集合{aq1 mod m,aq2 mod m,···,aqφ(m) mod m}与集合{q1,q2,···,qφ(m)}为同一个集合。

综上所述:

aφ(m)q1q2···qφ(m)(aq1)(aq2)···(aqφ(m))(aq1 mod m)(aq2 mod m)···(aqφ(m) mod m)q1q2···qφ(m)(modm)

aφ(m)q1q2···qφ(m)q1q2···qφ(m)(modm)

推出:

aφ(m)1(modm)

费马小定理

结论

p 为素数,gcd(a,m)=1,则 am11(modm)

另一个形式:对于任意整数 a,有 ama(modm)

证明

费马小定理是欧拉定理的特殊情况,在m为质数(素数)时,φ(m)的值为m1故可以得到am11(modm)

线性同余方程

定义

形如 axb(modn)的方程称为 线性同余方程(Congruence Equation)。其中,abn 为给定整数,x 为未知数。需要从区间 [0,n1] 中求解 x,当解不唯一时需要求出全体解。

线性同余方程组

定义——「物不知数」问题

在前面引入了线性同余方程后,我们开始讨论线性同余方程组。

线性同余方程组形式如下:

{xa1(modn1)xa2(modn2)xak(modnk)

特殊的,其中 n1,n2,,nk 两两互质。

对于这个方程组,一千五百年前的中国古人有一个更为形象的问题。

「物不知数」问题:有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?

即求满足以下条件的整数:除以 32,除以 53,除以 72

我们要求解这个方程组,需要引入中国剩余定理 (Chinese Remainder Theorem, CRT)。

求解——中国剩余定理

我们先来介绍CRT的过程:

  1. 计算所有模数的积 n
  2. 对于第 i 个方程:
    1. 计算 mi=nni
    2. 计算 mi 在模 ni 意义下的逆元 mi1
    3. 计算 ci=mimi1不要对 ni 取模)。
  3. 方程组在模 n 意义下的唯一解为:x=i=1kaici(modn)

证明:

因为有 mi=nni,当 ij 时,有 mj0(modni),因为 ijmjni 的倍数(通过 mj 为其它所有模数之积可得)

模意义下的乘法逆元:如果一个线性同余方程 ax1(modb),则 x 称为 amodb 的逆元,记作 a1

显然,因为 ci=mikmi=nni,对于所有 ij,都有 cimi0(modnj)。我们可以把这一步的作用看做“消去 ci 在模 nj 下答案的影响”

而对于 i=j 的情况,根据乘法逆元的定义我们可以得 mi×mi1 在取模意义下等于 1,那么于是有cimi(mi1modni)1(modni)

注意观察计算式为等号(且没有取模),证明式为同余符号。两数相等是两数同余的充分条件。

那么最后推导计算结果 x

xj=1kajcj(modni)aici(modni)aimi(mi1modni)(modni)ai(modni)

其中, j=1kajcjaici(modni)cimi0(modnj) 可得。注意到在这个过程中我们会使用到 m1 的乘法逆元,我们可以使用到费马小定理进行求解,因为 ama(modm),所以 a1am2(modm),于是我们得出了模意义下乘法逆元的求解。于是到此,我们完成了对线性同余方程方程组的求解。

应用

  1. 我们可以使用中国剩余定理直接进行线性同余方程方程组的式子,如“物不知数问题“

  2. 部分情况需要在取模意义下进行运算,但是模数非质数会影响逆元的计算,这时我们可以使用中国剩余定理对模数进行拆分,具体地,将模数分解质因数,如果模数由一些不重复的质数相乘得到,那么我们可以分别在这些模数的取模意义下进行运算,最后用中国剩余定理合并答案。

    例:给定 Gn,求解 kn(nk)mod999 911 658 [1]

    999 911 658 非质数的情况下,无法保证 x[1,999 911 657]x 都有逆元存在,上式无法直接计算。

    因为 999 911 658=2×3×4679×35617,所以我们先求解出kn(nk) 分别在模 23467935617 意义下的结果,记答案为 a1,a2,a3,a4,那么最终问题转换为求解下述线性同余方程组:

    {xa1(mod2)xa2(mod3)xa3(mod4679)xa4(mod35617)

    对此我们就可以使用中国剩余定理进行求解了

扩展——模数不互质的情况

xa1(modm1)xa2(modm2),我们无法使用正常的中国剩余定理进行求解,于是需要进行转换。

使用模运算的定义将线性同余方程组转化为不定方程:x=m1p+a1=m2q+a2,其中 p,q 是整数,则有 m1pm2q=a2a1

根据裴蜀定理可得,当 a2a1 不能被 gcd(m1,m2) 整除时,无解。否则,求解[2]这个不定方程的一组可行解 (p,q),那么原来的两方程组成的模方程组的解为 xb(modM),其中 b=m1p+a1M=lcm(m1,m2)

对于线性同余方程组的同余方程用上面的方法两两合并即可求解出最终答案。

结语

在上文中我们讨论了线性同余方程组和其前置知识,学习了一个新的运算——模运算,并且在模运算的世界里得出了许多的推论,并且最终解决了中国古人留下的难题——“物不知数”问题。

那么我们就初步学习了线性同余方程组的相关知识,然而知识的海洋是广阔的,与线性同余方程组相关的很多知识因为篇幅原因,无法在这里尽数讲解,希望这篇文章能够引起大家对线性同余方程组的兴趣并继续深入学习,体会到模运算世界的奥妙!

[1] 题目及求解思路来源于oi-wiki.org/math/number-theory/crt/

[2] 求解这个不定方程可以使用扩展欧几里得算法,在这里不进行具体介绍

参考文献

[1] OI-wiki 《中国剩余定理》oi-wiki.org

[2] 算法导论(原书第三版)/(美)科尔曼 等著;殷建平 等译. —北京:机械工业出版社,2013.1(2021.8重印)

作者:高欣宇,肖志昊(排名不分先后)

posted @   GXYZY  阅读(222)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起