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

写在前面

说实话第一次听到中国剩余定理有一种“来自东方的神秘力量”的感觉,可是仔细一想,为什么牛顿力学不叫英国力学,柯西不等式不叫法国不等式,拉格朗日中值定理不叫法国中值定理呢?怎么说呢,其实还是西方掌握了自然科学的话语体系emmm.【所以叫孙子定理好点?】

1852年,英国来华传教士伟烈亚力将《孙子算经》中“物不知数”问题的解法传至欧洲。1874年,英国数学家马西森指出此法符合1801年由高斯得出的关于同余式解法的一般性定理,因而西方称之为“中国剩余定理”。

定理重述

它研究什么

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

翻译成数学语言就是:求解方程组
{ x ≡ 2 (   m o d    3 ) x ≡ 3 (   m o d    5 ) x ≡ 2 (   m o d    7 ) \left\{ \begin{aligned} &x\equiv 2(\bmod\,3)\\ &x\equiv 3(\bmod\,5)\\ &x\equiv 2(\bmod\,7) \end{aligned} \right. x2(mod3)x3(mod5)x2(mod7)
这样具体的问题的研究意义不是很大(但是具体问题的研究很重要),所以我们将其抽象一下
{ x ≡ a 1 (   m o d    m 1 ) x ≡ a 2 (   m o d    m 2 ) ⋮ x ≡ a n (   m o d    m n ) \left\{ \begin{aligned} &x\equiv a_1(\bmod\,m_1)\\ &x\equiv a_2(\bmod\,m_2)\\ &\quad\quad\vdots\\ &x\equiv a_n(\bmod\,m_n) \end{aligned} \right. xa1(modm1)xa2(modm2)xan(modmn)
研究这种方程组的解.注意到任何一个有解的不首1的同余方程( x x x的系数不为1)都是可以通过辗转相除法然后回代化为首1的同余方程(由贝祖定理可以得到,有兴趣的读者可以参考第一篇随笔或自行证明).
另外,我们还要求 ( m 1 , m 2 , ⋯   , m n ) = 1 (m_1,m_2,\cdots,m_n)=1 (m1,m2,,mn)=1,所有有解的方程组都可以化为这种形式.

数论倒数

何为数论倒数?我们知道在实数中,若 a ⋅ b = 1 a\cdot b=1 ab=1 a , b a,b a,b互为倒数,这里我们将实数 a , b a,b a,b换为模 m m m同余类中的 [ a ] m , [ b ] m [a]_m,[b]_m [a]m,[b]m,乘法换为同余类的乘法,单位元换为 [ 1 ] m [1]_m [1]m,可以得到数论倒数的定义:
a ⋅ b ≡ 1 (   m o d    m ) a\cdot b \equiv 1(\bmod\, m) ab1(modm),我们称 a , b a,b a,b互为模 m m m的数论倒数.

解是什么?

很显然的一点,这个方程组的解一定是模 [ m 1 , m 2 , ⋯   , m n ] [m_1,m_2,\cdots,m_n] [m1,m2,,mn]同余的,因为每一个方程的解都是以 m i m_i mi为周期的,就是考虑 M = k i ⋅ m i = k i + 1 ⋅ m i + 1 , i = 1 , 2 , ⋯   , n − 1 M=k_i\cdot m_i=k_{i+1}\cdot m_{i+1},i=1,2,\cdots,n-1 M=kimi=ki+1mi+1,i=1,2,,n1的最小值.由于模数是互素的,解的模数 M = m 1 m 2 ⋯ m n M=m_1m_2\cdots m_n M=m1m2mn.那么我们只要找到一个特解就可以得到通解.

巧妙的特解

那么特解是如何找到的呢?我们观察这个和式:
∑ i = 1 n S i = ∑ i = 1 n a i M i t i = a 1 M 1 t 1 + ⋯ + a n M n t n \sum\limits_{i=1}^nS_i=\sum\limits_{i=1}^n a_iM_it_i=a_1M_1t_1+\cdots + a_nM_nt_n i=1nSi=i=1naiMiti=a1M1t1++anMntn
其中 M i = M m i M_i = \dfrac{M}{m_i} Mi=miM, t i t_i ti M i M_i Mi互为数论倒数.

这是一个很精妙的构造.我们观察其中任意一项 S i = a i M i t i S_i=a_iM_it_i Si=aiMiti.由于 M i M_i Mi是除 m i m_i mi外其他 n − 1 n-1 n1个方程模数的积,这一项可以被除 m i m_i mi外任意一个模数整除.而由于 M i , t i M_i,t_i Mi,ti在模 m i m_i mi时是互为倒数的,所以 a i M i t i a_iM_it_i aiMiti在模 m i m_i mi时和 a i a_i ai同余.

我们构造一个矩阵 A A A, a i j a_{ij} aij S i = a i M i t i (   m o d    m j ) S_i=a_iM_it_i(\bmod\, m_j) Si=aiMiti(modmj)的值,说通俗点就是第 i i i行是和式的第 i i i项模 m 1 m_1 m1一直到 m n m_n mn的结果,于是有
A = ( a 1 0 0 ⋯ 0 0 a 2 0 ⋯ 0 0 0 a 3 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 ⋯ a n ) A=\left( \begin{array}{ccccc} a_1 & 0 & 0 & \cdots & 0\\ 0 & a_2 & 0 & \cdots & 0\\ 0&0&a_3&\cdots &0\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ 0 & 0 & 0 & \cdots & a_n \end{array} \right) A=a10000a20000a30000an
我们可以发现 A A A的第 j j j列就是和式的每一项模 m j m_j mj的余数.我们把矩阵的每一列都按行求和就是整个和式(特解)模 m j m_j mj的结果记为 B B B,有
B = ( a 1 a 2   ⋯   a n ) B = (a_1\quad a_2 \,\cdots \,a_n) B=(a1a2an)
恰好是方程组的所有模数.

跟证明 A ⋅ A ∗ = ∣ A ∣ ⋅ E A\cdot A^{*}=|A|\cdot E AA=AE异曲同工(我感觉)!

孙子怎么想到的

我也不知道,只知道很巧妙.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值