浅谈线性同余方程组

浅谈线性同余方程组

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

摘要

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

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

模运算

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

定义

我们令 a   m o d   b = a − ⌊ a / b ⌋ × b a \ mod \ b = a - \lfloor a/b \rfloor \times b a mod b=aa/b×b ,那么 a   m o d   b a\ mod\ b a mod b 就称为对 a a a 进行模 b b b 运算 , m o d mod mod 称为模运算

非正式地,可以将模 n n n 运算看作每个 x   m o d   n x\ mod\ n x mod n 的值都用集合 { 0 , 1 , 2 , ⋯   , n − 1 } \lbrace 0,1,2,\cdots,n-1\rbrace {0,1,2,,n1} 中的某个元素替代,使得 x − ( x   m o d   n ) = k × n , k ∈ Z x - (x\ mod\ n) = k \times n,k\in \mathbb{Z} x(x mod n)=k×n,kZ ,我们在此只考虑 a ∈ Z , b ∈ Z a \in \mathbb{Z},b \in \mathbb{Z} aZ,bZ

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

证明:

若有一个 k k k 使得 x − ( x   m o d   n ) = k × n   ( k ∈ Z ) x - (x\ mod\ n) = k \times n\ (k\in \mathbb{Z}) x(x mod n)=k×n (kZ) 并记此时的 x   m o d   n x\ mod\ n x mod n m 1 m_1 m1

那么对于 k 0 > k k_0 > k k0>k,令 x   m o d   n = m 2 x\ mod\ n = m_2 x mod n=m2 ,有 m 2 = x − k 0 × n m_2 = x - k_0 \times n m2=xk0×n

因为 k 0 > k k_0 > k k0>k,于是有 k 0 × n ≥ k × n + n k_0 \times n \geq k \times n + n k0×nk×n+n,所以 m 2 ≤ x − ( x − m 1 ) − n m_2 \leq x - (x - m_1) - n m2x(xm1)n,即 m 2 ≤ m 1 − n m_2 \leq m_1 - n m2m1n

已知 m 1 ∈ [ 0 , n − 1 ] m_1 \in [0,n-1] m1[0,n1],那么 m 1 − n ∈ [ − n , − 1 ] m_1-n \in [-n,-1] m1n[n,1],最后得出 m 2 ≤ − 1 m_2 \leq -1 m21,与 x   m o d   n ∈ [ 0 , n − 1 ] x\ mod\ n \in [0,n-1] x mod n[0,n1] 不符。

同理,对于 k 0 < k k_0 < k k0<k,有 m 3 ≥ n m_3 \geq n m3n ,与 x   m o d   n ∈ [ 0 , n − 1 ] x\ mod\ n \in [0,n-1] x mod n[0,n1] 不符。得证。

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

证明:

x   m o d   n x\ mod\ n x mod n 根据定义一共可能有 { 0 , 1 , 2 , ⋯   , n − 1 } \lbrace 0,1,2,\cdots,n-1\rbrace {0,1,2,,n1} 一共 n − 1 n-1 n1 种解。若使 x − ( x   m o d   n ) = k × n   ( k ∈ Z ) x - (x\ mod\ n) = k \times n\ (k\in \mathbb{Z}) x(x mod n)=k×n (kZ) k k k 等于 0 0 0,易得在 x ∈ [ 0 , n − 1 ] x \in [0,n-1] x[0,n1] x   m o d   n = x x\ mod\ n = x x mod n=x,有解。根据定义得 ( x + k × n )   m o d   n = x   m o d   n (x+k \times n)\ mod\ n = x\ mod\ n (x+k×n) mod n=x mod n,故 [ k × n , ( k + 1 ) × n − 1 ] , k ∈ Z [k \times n,(k+1) \times n - 1],k \in \mathbb{Z} [k×n,(k+1)×n1],kZ 有解,于是 x   m o d   n x\ mod\ n x mod n Z \mathbb{Z} Z 上恒有解,得证。

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

定理3 ( a   m o d   n + b   m o d   n )   m o d   n = ( a + b )   m o d   n (a\ mod\ n + b\ mod\ n)\ mod\ n = (a+b)\ mod\ n (a mod n+b mod n) mod n=(a+b) mod n

证明:

寻找 p 1 , p 2 p_1,p_2 p1,p2 使得 a = k 1 × n + p 1 , b = k 2 × n + p 2 , k 1 、 k 2 ∈ Z a = k_1 \times n + p_1,b = k_2 \times n + p_2,k_1、k2 \in \mathbb{Z} a=k1×n+p1,b=k2×n+p2,k1k2Z 并且 p 1 、 p 2 ∈ [ 0 , n − 1 ] p_1、p_2 \in [0,n-1] p1p2[0,n1]。通过上面的定义和定理可以得知, p 1 , p 2 p_1,p_2 p1,p2 就是 a   m o d   n , b   m o d   n a\ mod\ n,b\ mod\ n a mod n,b mod n,且是唯一的。

( a + b )   m o d   n (a+b)\ mod\ n (a+b) mod n

= ( k 1 × n + p 1 + k 2 × n + p 2 )   m o d   n = (k_1 \times n + p_1 + k_2 \times n + p_2)\ mod\ n =(k1×n+p1+k2×n+p2) mod n

= ( p 1 + p 2 + ( k 1 + k 2 ) × n )   m o d   n =(p_1 + p_2 + (k_1+k_2) \times n)\ mod\ n =(p1+p2+(k1+k2)×n) mod n

= ( a   m o d   n + b   m o d   n )   m o d   n =(a\ mod\ n + b\ mod\ n)\ mod\ n =(a mod n+b mod n) mod n

定理4 ( a   m o d   n × b   m o d   n )   m o d   n = ( a × b )   m o d   n (a\ mod\ n \times b\ mod\ n)\ mod\ n = (a \times b)\ mod\ n (a mod n×b mod n) mod n=(a×b) mod n

证明:

同上,寻找 p 1 , p 2 p_1,p_2 p1,p2 使得 a = k 1 × n + p 1 , b = k 2 × n + p 2 , k 1 、 k 2 ∈ Z a = k_1 \times n + p_1,b = k_2 \times n + p_2,k_1、k2 \in \mathbb{Z} a=k1×n+p1,b=k2×n+p2,k1k2Z 并且 p 1 、 p 2 ∈ [ 0 , n − 1 ] p_1、p_2 \in [0,n-1] p1p2[0,n1] p 1 , p 2 p_1,p_2 p1,p2 就是 a   m o d   n , b   m o d   n a\ mod\ n,b\ mod\ n a mod n,b mod n

( a × b )   m o d   n (a \times b)\ mod\ n (a×b) mod n

= [ ( k 1 × n + p 1 ) × ( k 2 × n + p 2 ) ]   m o d   n = [(k_1 \times n + p_1) \times (k_2 \times n + p_2)]\ mod\ n =[(k1×n+p1)×(k2×n+p2)] mod n

= ( k 1 × p 2 × n + p 1 × k 2 × n + ( k 1 × k 2 ) × n 2 + p 1 × p 2 )   m o d   n =(k_1 \times p_2 \times n + p_1 \times k_2 \times n + (k_1 \times k_2) \times n^2 + p_1 \times p_2)\ mod\ n =(k1×p2×n+p1×k2×n+(k1×k2)×n2+p1×p2) mod n

= ( a   m o d   n × b   m o d   n )   m o d   n =(a\ mod\ n \times b\ mod\ n)\ mod\ n =(a mod n×b mod n) mod n

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

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

扩展——有理数取模

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

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

其他规律

分配律:
( a + b )   m o d   p = ( a   m o d   p + b   m o d   p )   m o d   p (a + b) \ mod\ p = (a \ mod\ p + b \ mod\ p) \ mod\ p (a+b) mod p=(a mod p+b mod p) mod p
( a − b )   m o d   p = ( a   m o d   p − b   m o d   p )   m o d   p (a - b) \ mod\ p = (a \ mod\ p - b \ mod\ p ) \ mod\ p (ab) mod p=(a mod pb mod p) mod p
( a ∗ b )   m o d   p = ( a   m o d   p ∗ b   m o d   p )   m o d   p (a * b) \ mod\ p = (a \ mod\ p * b \ mod\ p) \ mod\ p (ab) mod p=(a mod pb mod p) mod p
( a b )   m o d   p = [ ( a   m o d   p ) b ]   m o d   p (a ^ b) \ mod\ p = [(a \ mod\ p) ^ b] \ mod\ p (ab) mod p=[(a mod p)b] mod p
[ ( a + b )   m o d   p ∗ c ]   m o d   p = [ ( a ∗ c )   m o d   p + ( b ∗ c )   m o d   p ]   m o d   p [(a + b)\ mod\ p * c] \ mod\ p = [(a * c) \ mod\ p + (b * c) \ mod\ p] \ mod\ p [(a+b) mod pc] mod p=[(ac) mod p+(bc) mod p] mod p

结合律:
[ ( a + b )   m o d   p + c ]   m o d   p = [ a + ( b + c )   m o d   p ]   m o d   p [(a + b) \ mod\ p + c] \ mod\ p = [a + (b + c) \ mod\ p] \ mod\ p [(a+b) mod p+c] mod p=[a+(b+c) mod p] mod p
[ ( a ∗ b )   m o d   p ∗ c ]   m o d   p = [ a ∗ ( b ∗ c )   m o d   p ]   m o d   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 )   m o d   p = ( b + a )   m o d   p (a + b) \ mod\ p = (b + a) \ mod\ p (a+b) mod p=(b+a) mod p
( a ∗ b )   m o d   p = ( b ∗ a )   m o d   p (a * b) \ mod\ p = (b * a) \ mod\ p (ab) mod p=(ba) mod p

欧几里得算法

这是一个如何求解最大公约数的方法。公式为:
g c d ( a , b ) = g c d ( b , a % b ) gcd(a,b)=gcd(b,a\%b) gcd(a,b)=gcd(b,a%b)
a a a b b b均为正整数,保证 a > b a>b a>b。函数 g c d gcd gcd代表两个数的最大公约数。 % \% % m o d mod mod 的另一种写法。

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

证明:

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

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

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

我们再把取余换做减法 ( k a × d ) − t m a x × ( k b × d ) (k_a\times d)-t_{max}\times(k_b\times d) (ka×d)tmax×(kb×d),这里的 t m a x t_{max} tmax表示最大的 t t t使得 t × ( k b × d ) t\times (k_b\times d) t×(kb×d)小于等于 ( k a × d ) (k_a\times d) (ka×d)成立。化简一下就会变成 ( k a − t m a x × k b ) × d (k_a-t_{max}\times k_b)\times d (katmax×kb)×d。很明显, a % b a\%b a%b也含有 a a a b b b的最大公约数 d d d。并且 a % b < b ≤ a a\%b<b\leq a a%b<ba,这样就缩小了范围。

公式 g c d ( a , b ) = g c d ( b , a % b ) gcd(a,b)=gcd(b,a\%b) gcd(a,b)=gcd(b,a%b)

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

首先我们将 a % b = ( k a − t m a x × k b ) × d a\%b=(k_a-t_{max}\times k_b)\times d a%b=(katmax×kb)×d中的 ( k a − t m a x × k b ) (k_a-t_{max}\times k_b) (katmax×kb)替换为 k r k_r kr,那么 a % b = k r × d a\%b=k_r\times d a%b=kr×d,方便理解。

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

k b k_b kb k r k_r kr互质

反证法。首先我们有式子 k r = k a − t m a x × k b k_r=k_a-t_{max}\times k_b kr=katmax×kb,设 k r k_r kr不与 k b k_b kb互质,那么设他们的公因数为 p p p

将原式转化为 x × p = k a − t m a x × y × p x\times p=k_a-t_{max}\times y\times p x×p=katmax×y×p,移项得到 ( x + t m a x × y ) × p = k a (x+t_{max}\times y)\times p=k_a (x+tmax×y)×p=ka,观察式子发现此时 k a k_a ka包含因子 p p p,然而我们上面假设的 k b k_b kb也含有因子 p p p,这样 k a k_a ka k b k_b kb就不互质了,很明显违背了最开始的设定,故 k r k_r kr k b k_b kb不互质的假设不成立。

k a k_a ka k r k_r kr不一定互质

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

k a = 5 × 7 k_a=5\times 7 ka=5×7 k b = 2 × 3 k_b=2\times 3 kb=2×3,带入原式得到 g c d ( 5 × 7 × d , 2 × 3 × d ) = g c d ( 5 × 7 × d , 5 × d ) gcd(5\times 7\times d,2\times 3\times d)=gcd(5\times 7\times d,5\times d) gcd(5×7×d,2×3×d)=gcd(5×7×d,5×d),这很明显 k a k_a ka不与 k r k_r kr互质。

裴蜀定理

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

对于给定的两个数 a a a b b b,一定有两个数 ( x , y ) (x,y) (xy)满足 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b)

证明

我们还是将 a a a b b b表示为 p ∗ d p*d pd q ∗ d q*d qd,那么原式就为 p ∗ x ∗ d + q ∗ y ∗ d = g c d ( a , b ) ∗ k p*x*d+q*y*d=gcd(a,b)*k pxd+qyd=gcd(a,b)k
就可以看为 ( p ∗ x + q ∗ y ) = k (p*x+q*y)=k (px+qy)=k,且一定有 k k k成立。
我们这就证明了裴蜀定理

欧拉函数

定义

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

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

特别地 φ ( 1 ) = 1 \varphi(1) = 1 φ(1)=1

当 n 是质数的时候,显然有 φ ( n ) = n − 1 \varphi(n) = n - 1 φ(n)=n1

我们将 N N N分解质因数可得:( p i p_i pi为质因数)
N = p 1 c 1 p 2 c 2 p 3 c 3 ⋅ ⋅ ⋅ p m c m N=p_1^{c_1}p_2^{c_2}p_3^{c_3}···p_m^{c_m} N=p1c1p2c2p3c3⋅⋅⋅pmcm
则:
φ ( N ) = N ∗ p 1 − 1 p 1 ∗ p 2 − 1 p 2 ∗ ⋅ ⋅ ⋅ ∗ p m − 1 p m = N ∗ ∏ 质数 p ∣ N ( 1 − 1 p ) \varphi (N)=N*\frac{p_1-1}{p_1}*\frac{p_2-1}{p_2}*···*\frac{p_m-1}{p_m}=N*\prod_{质数p|N}(1-\frac{1}{p}) φ(N)=Np1p11p2p21⋅⋅⋅pmpm1=N质数pN(1p1)
公式推导:

利用容斥的思想,设 p p p N N N的质因子, 1 1 1 N N N p p p的倍数有 p , 2 p , 3 p , ⋅ ⋅ ⋅ , ⌊ ( N / p ) ⌋ ∗ p p,2p,3p,···,\left \lfloor (N/p) \right \rfloor *p p,2p,3p,⋅⋅⋅,(N/p)p,共有 ⌊ ( N / p ) ⌋ \left \lfloor (N/p) \right \rfloor (N/p)个。同理,若 q q q也是 N N N的质因子,则 1 1 1 N N N q q q的倍数有 ⌊ ( N / q ) ⌋ \left \lfloor (N/q) \right \rfloor (N/q)个。如果我们把这 ⌊ ( N / p ) ⌋ + ⌊ ( N / q ) ⌋ \left \lfloor (N/p) \right \rfloor +\left \lfloor (N/q) \right \rfloor (N/p)+(N/q)个数去掉,那么 p ∗ q p*q pq的倍数被排除了两次,需要加回来一次。因此, 1 1 1 N N N中不含有共同质因子 p p p q q q的个数为:
N − N p − N q + N p ∗ q = N ∗ ( 1 − 1 p − 1 q + 1 p ∗ q ) = N ∗ ( 1 − 1 p ) ∗ ( 1 − 1 q ) N-\frac{N}{p} -\frac{N}{q}+ \frac{N}{p*q}=N*(1-\frac{1}{p} -\frac{1}{q} +\frac{1}{p*q} ) =N*(1-\frac{1}{p} )*(1-\frac{1}{q} ) NpNqN+pqN=N(1p1q1+pq1)=N(1p1)(1q1)
类似的,可以在 N N N的全部因子上使用容斥原理,即可得到公式。

性质

φ ( n ) \varphi(n) φ(n)为积性函数,即当 g c d ( a , b ) = 1 gcd(a,b)=1 gcd(a,b)=1时, φ ( a b ) = φ ( a ) φ ( b ) \varphi (ab)=\varphi (a)\varphi (b) φ(ab)=φ(a)φ(b)

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

同余

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

同余类

定义:对于 ∀ a ∈ [ 0 , m − 1 ] \forall a\in \left [ 0,m-1 \right ] a[0,m1],集合 { a + k m } ( k ∈ Z ) \left \{ a+km \right \} \left ( k\in Z \right ) {a+km}(kZ)的所有数模 m m m同余,余数都是 a a a。该集合称为一个模 m m m的同余类,简记为 a ˉ \bar{a} aˉ

剩余系

完全剩余系

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

简化剩余系

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

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

a ∗ b   m o d   m = c a*b\ mod\ m=c ab mod m=c,则有: a ∗ b = k m ∗ m + c a*b=k_m*m+c ab=kmm+c

g c d ( m , c ) ≠ 1 gcd(m,c)\ne 1 gcd(m,c)=1 c c c m m m不互质),则可以提出 k m ∗ m k_m*m kmm c c c的公因数 d d d,将原式转变为 a ∗ b = d ∗ ( k m ∗ ( m ÷ d ) + ( c ÷ d ) ) a*b=d*(k_m*(m\div d)+(c\div d)) ab=d(km(m÷d)+(c÷d))。由该式可得 a ∗ b a*b ab k m ∗ m + c k_m*m+c kmm+c有公共因子 d d d,可得 m m m a ∗ b a*b ab有公共因子 d d d。又因为条件 g c d ( a ∗ b , m ) = 1 gcd(a*b,m)=1 gcd(ab,m)=1 a ∗ b a*b ab m m m互质),与结论不符合,所以 g c d ( m , c ) = 1 gcd(m,c)=1 gcd(m,c)=1 m m m c c c互质)。

欧拉定理

定义

gcd ⁡ ( a , m ) = 1 \gcd(a, m) = 1 gcd(a,m)=1,则 a φ ( m ) ≡ 1 ( m o d m ) a^{\varphi(m)} \equiv 1 \pmod{m} aφ(m)1(modm)

证明

m m m的简化剩余系为 { q 1 ‾ , q 2 ‾ , ⋅ ⋅ ⋅ , q φ ( m ) ‾ } \left \{ \overline{q_1}, \overline{q_2},···, \overline{q_{\varphi (m)}}\right \} {q1,q2,⋅⋅⋅,qφ(m)},对 ∀ q i , q j \forall q_i,q_j qi,qj,若 a ∗ q i ≡ a ∗ q j ( m o d m ) a*q_i \equiv a*q_j \pmod m aqiaqj(modm),则 a ∗ q i − a ∗ q j ≡ 0 ( m o d m ) a*q_i-a*q_j \equiv 0 \pmod m aqiaqj0(modm)(由同余式的性质可得), a ( q i − q j ) ≡ 0 ( m o d m ) a(q_i-q_j) \equiv 0 \pmod m a(qiqj)0(modm)。又因为 a a a m m m互质,所以可得 q i − q j ≡ 0 ( m o d m ) q_i-q_j\equiv 0 \pmod m qiqj0(modm),推出 q i ≡ q j ( m o d m ) q_i\equiv q_j \pmod m qiqj(modm) 。由此可知,当 q i ≠ q j q_i\ne q_j qi=qj时, a ∗ q i ≢ a ∗ q j ( m o d m ) a*q_i\not\equiv a*q_j \pmod m aqiaqj(modm)

通过这个结论,我们可以构造出集合 { a q 1 , a q 2 , ⋅ ⋅ ⋅ , a q φ ( m ) } \left \{ aq_1,aq_2,···,aq_{\varphi (m)} \right \} {aq1,aq2,⋅⋅⋅,aqφ(m)},由上面的结论可以知道集合 { a q 1   m o d   m , a q 2   m o d   m , ⋅ ⋅ ⋅ , a q φ ( m )   m o d   m } \left \{ aq_1\ mod\ m,aq_2\ mod\ m,···,aq_{\varphi (m)}\ mod\ m \right \} {aq1 mod m,aq2 mod m,⋅⋅⋅,aqφ(m) mod m}中的元素两两不相同。

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

根据以上结论:集合 { a q 1   m o d   m , a q 2   m o d   m , ⋅ ⋅ ⋅ , a q φ ( m )   m o d   m } \left \{ aq_1\ mod\ m,aq_2\ mod\ m,···,aq_{\varphi (m)}\ mod\ m \right \} {aq1 mod m,aq2 mod m,⋅⋅⋅,aqφ(m) mod m}中有 φ ( m ) \varphi (m) φ(m)个元素,且两两不相同,并且每一个元素都与 m m m互质。可以推导出集合 { a q 1 ‾ , a q 2 ‾ , ⋅ ⋅ ⋅ , a q φ ( m ) ‾ } \left \{ \overline{aq_1}, \overline{aq_2},···, \overline{aq_{\varphi (m)}}\right \} {aq1,aq2,⋅⋅⋅,aqφ(m)}也可以代表模 m m m的同余类。且集合 { a q 1   m o d   m , a q 2   m o d   m , ⋅ ⋅ ⋅ , a q φ ( m )   m o d   m } \left \{ aq_1\ mod\ m,aq_2\ mod\ m,···,aq_{\varphi (m)}\ mod\ m \right \} {aq1 mod m,aq2 mod m,⋅⋅⋅,aqφ(m) mod m}与集合 { q 1 , q 2 , ⋅ ⋅ ⋅ , q φ ( m ) } \left \{ q_1,q_2,···,q_{\varphi (m)} \right \} {q1,q2,⋅⋅⋅,qφ(m)}为同一个集合。

综上所述:
a φ ( m ) q 1 q 2 ⋅ ⋅ ⋅ q φ ( m ) ≡ ( a q 1 ) ( a q 2 ) ⋅ ⋅ ⋅ ( a q φ ( m ) ) ≡ ( a q 1   m o d   m ) ( a q 2   m o d   m ) ⋅ ⋅ ⋅ ( a q φ ( m )   m o d   m ) ≡ q 1 q 2 ⋅ ⋅ ⋅ q φ ( m ) ( m o d m ) a^{\varphi (m)}q_1q_2···q_{\varphi (m)}\equiv(aq_1)(aq_2)···(aq_{\varphi (m)})\equiv(aq_1\ mod\ m)(aq_2\ mod\ m)···(aq_{\varphi (m)}\ mod\ m)\equiv q_1q_2···q_{\varphi (m)} \pmod 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 ) q 1 q 2 ⋅ ⋅ ⋅ q φ ( m ) ≡ q 1 q 2 ⋅ ⋅ ⋅ q φ ( m ) ( m o d m ) a^{\varphi (m)}q_1q_2···q_{\varphi (m)}\equiv q_1q_2···q_{\varphi (m)}\pmod m aφ(m)q1q2⋅⋅⋅qφ(m)q1q2⋅⋅⋅qφ(m)(modm)

推出:
a φ ( m ) ≡ 1 ( m o d m ) a^{\varphi (m)}\equiv 1\pmod m aφ(m)1(modm)

费马小定理

结论

p p p 为素数, gcd ⁡ ( a , m ) = 1 \gcd(a,m) = 1 gcd(a,m)=1,则 a m − 1 ≡ 1 ( m o d m ) a^{m - 1} \equiv 1 \pmod{m} am11(modm)

另一个形式:对于任意整数 a a a,有 a m ≡ a ( m o d m ) a^m \equiv a \pmod{m} ama(modm)

证明

费马小定理是欧拉定理的特殊情况,在 m m m为质数(素数)时, φ ( m ) \varphi (m) φ(m)的值为 m − 1 m-1 m1故可以得到 a m − 1 ≡ 1 ( m o d m ) a^{m - 1} \equiv 1 \pmod{m} am11(modm)

线性同余方程

定义

形如 a x ≡ b ( m o d n ) ax\equiv b\pmod n axb(modn)的方程称为 线性同余方程(Congruence Equation)。其中, a a a b b b n n n 为给定整数, x x x 为未知数。需要从区间 [ 0 , n − 1 ] [0, n-1] [0,n1] 中求解 x x x,当解不唯一时需要求出全体解。

线性同余方程组

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

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

线性同余方程组形式如下:
{ x ≡ a 1 ( m o d n 1 ) x ≡ a 2 ( m o d n 2 ) ⋮ x ≡ a k ( m o d n k ) \begin{cases} x &\equiv a_1 \pmod {n_1} \\ x &\equiv a_2 \pmod {n_2} \\ &\vdots \\ x &\equiv a_k \pmod {n_k} \\ \end{cases} xxxa1(modn1)a2(modn2)ak(modnk)
特殊的,其中 n 1 , n 2 , … , n k n_1,n_2,\dots,n_k n1,n2,,nk 两两互质。

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

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

即求满足以下条件的整数:除以 3 3 3 2 2 2,除以 5 5 5 3 3 3,除以 7 7 7 2 2 2

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

求解——中国剩余定理

我们先来介绍CRT的过程:

  1. 计算所有模数的积 n n n
  2. 对于第 i i i 个方程:
    1. 计算 m i = n n i m_i=\frac{n}{n_i} mi=nin
    2. 计算 m i m_i mi 在模 n i n_i ni 意义下的逆元 m i − 1 m_i^{-1} mi1
    3. 计算 c i = m i m i − 1 c_i=m_im_i^{-1} ci=mimi1不要对 n i n_i ni 取模)。
  3. 方程组在模 n n n 意义下的唯一解为: x = ∑ i = 1 k a i c i ( m o d n ) x=\sum_{i=1}^k a_ic_i \pmod n x=i=1kaici(modn)

证明:

因为有 m i = n n i m_i=\frac{n}{n_i} mi=nin,当 i ≠ j i\neq j i=j 时,有 m j ≡ 0 ( m o d n i ) m_j \equiv 0 \pmod {n_i} mj0(modni),因为 i ≠ j i \not= j i=j m j m_j mj n i n_i ni 的倍数(通过 m j m_j mj 为其它所有模数之积可得)

模意义下的乘法逆元:如果一个线性同余方程 a x ≡ 1 ( m o d b ) ax \equiv 1 \pmod b ax1(modb),则 x x x 称为 a   m o d   b a \bmod b amodb 的逆元,记作 a − 1 a^{-1} a1

显然,因为 c i = m i ∗ k c_i = m_i * k ci=mik m i = n n i m_i = \frac{n}{n_i} mi=nin,对于所有 i ≠ j i \not= j i=j,都有 c i ≡ m i ≡ 0 ( m o d n j ) c_i \equiv m_i \equiv 0 \pmod {n_j} cimi0(modnj)。我们可以把这一步的作用看做“消去 c i c_i ci 在模 n j n_j nj 下答案的影响”

而对于 i = j i = j i=j 的情况,根据乘法逆元的定义我们可以得 m i × m i − 1 m_i \times m_i^{-1} mi×mi1 在取模意义下等于 1 1 1,那么于是有 c i ≡ m i ⋅ ( m i − 1   m o d   n i ) ≡ 1 ( m o d n i ) c_i \equiv m_i \cdot (m_i^{-1} \bmod {n_i}) \equiv 1 \pmod {n_i} cimi(mi1modni)1(modni)

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

那么最后推导计算结果 x x x
x ≡ ∑ j = 1 k a j c j ( m o d n i ) ≡ a i c i ( m o d n i ) ≡ a i ⋅ m i ⋅ ( m i − 1   m o d   n i ) ( m o d n i ) ≡ a i ( m o d n i ) \begin{aligned} x&\equiv \sum_{j=1}^k a_jc_j &\pmod {n_i} \\ &\equiv a_ic_i &\pmod {n_i} \\ &\equiv a_i \cdot m_i \cdot (m^{-1}_i \bmod n_i) &\pmod {n_i} \\ &\equiv a_i &\pmod {n_i} \end{aligned} xj=1kajcjaiciaimi(mi1modni)ai(modni)(modni)(modni)(modni)
其中, ∑ j = 1 k a j c j ≡ a i c i ( m o d n i ) \begin{aligned} \sum_{j=1}^k a_jc_j \equiv a_ic_i \pmod {n_i} \end{aligned} j=1kajcjaici(modni) c i ≡ m i ≡ 0 ( m o d n j ) c_i \equiv m_i \equiv 0 \pmod {n_j} cimi0(modnj) 可得。注意到在这个过程中我们会使用到 m − 1 m^{-1} m1 的乘法逆元,我们可以使用到费马小定理进行求解,因为 a m ≡ a ( m o d m ) a^m \equiv a \pmod{m} ama(modm),所以 a − 1 ≡ a m − 2 ( m o d m ) a^{-1} \equiv a^{m-2} \pmod{m} a1am2(modm),于是我们得出了模意义下乘法逆元的求解。于是到此,我们完成了对线性同余方程方程组的求解。

应用

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

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

    例:给定 G G G n n n,求解 ∑ k ∣ n ( n k )   m o d   999   911   658 \sum_{k\mid n}\binom{n}{k} \bmod 999~911~658 kn(kn)mod999 911 658 [ 1 ] ^{[1]} [1]

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

    因为 999   911   658 = 2 × 3 × 4679 × 35617 999~911~658=2 \times 3 \times 4679 \times 35617 999 911 658=2×3×4679×35617,所以我们先求解出 ∑ k ∣ n ( n k ) \sum_{k\mid n}\binom{n}{k} kn(kn) 分别在模 2 2 2 3 3 3 4679 4679 4679 35617 35617 35617 意义下的结果,记答案为 a 1 , a 2 , a 3 , a 4 a_1,a_2,a_3,a_4 a1,a2,a3,a4,那么最终问题转换为求解下述线性同余方程组:

    { x ≡ a 1 ( m o d 2 ) x ≡ a 2 ( m o d 3 ) x ≡ a 3 ( m o d 4679 ) x ≡ a 4 ( m o d 35617 ) \begin{cases}x \equiv a_1 \pmod 2\\x \equiv a_2 \pmod 3\\x \equiv a_3 \pmod {4679}\\x \equiv a_4 \pmod {35617}\end{cases} xa1(mod2)xa2(mod3)xa3(mod4679)xa4(mod35617)
    对此我们就可以使用中国剩余定理进行求解了

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

x ≡ a 1 ( m o d m 1 ) x\equiv a_1 \pmod {m_1} xa1(modm1) x ≡ a 2 ( m o d m 2 ) x\equiv a_2 \pmod {m_2} xa2(modm2),我们无法使用正常的中国剩余定理进行求解,于是需要进行转换。

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

根据裴蜀定理可得,当 a 2 − a 1 a_2-a_1 a2a1 不能被 gcd ⁡ ( m 1 , m 2 ) \gcd(m_1,m_2) gcd(m1,m2) 整除时,无解。否则,求解 [ 2 ] ^{[2]} [2]这个不定方程的一组可行解 ( p , q ) (p, q) (p,q),那么原来的两方程组成的模方程组的解为 x ≡ b ( m o d M ) x\equiv b\pmod M xb(modM),其中 b = m 1 p + a 1 b=m_1p+a_1 b=m1p+a1 M = lcm ( m 1 , m 2 ) M=\text{lcm}(m_1, m_2) M=lcm(m1,m2)

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

结语

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

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

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

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

参考文献

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

[ 2 ] [2] [2] 算法导论(原书第三版)/(美)科尔曼 等著;殷建平 等译. —北京:机械工业出版社,2013.1(2021.8重印)
作者:高欣宇,肖志昊(排名不分先后)

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值