中国剩余定理(CRT )
这次我决定简单粗暴地引入主题,因为要介绍的是我认为非常重要的、我非常喜欢的——中国剩余定理(Chinese remainder theorem, CRT) !
《孙子算经》是中国古代重要的数学著作,共三卷,成书约在四、五世纪,作者生平和具体编写年不详。
其卷下的第26题为:
今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?
答曰:‘二十三’。
术曰:三三数之剩二,置一百四十;五五数之剩三,置六十三,七七数之剩二,置三十,并之。得二百三十三,以二百一十减之,即得。凡三三数之剩一,则置七十;五五数之剩一,则置二十一;七七数之剩一,则置十五;一百六以上以一百五减之即得。
![](https://pic2.zhimg.com/80/v2-77ea0e0aa8a6542442a5296ac7a66255_720w.jpg)
(即——
一个整数除以3余2、除以5余3、除以7余2,求这个整数。
答案:23
解法:由于除以3余2,因此加上一个140;由于除以5余3,因此加上一个63;由于除以7余2,因此加上一个30;这三个数的和是140+63+30=233,再减去210,就得到了23了。
这么说吧,只要是除以3余了一个1,就加上一个70;只要是除以5余了一个1,就加上一个21;只要是除以7余了一个1,就加上一个15。然后累加。超过了106就减去105就行了。
)
该问题称之为“物不知数”问题。
在中国民间还有所谓“韩信点兵”等类似问题:
(先插播一下所谓“韩信将兵多多益善”)
上尝从容与信言诸将能不,各有差。上问曰:“如我,能将几何?”信曰:“陛下不过能将十万。”上曰:“如公何如?”曰:“如臣,多多益善耳。”上笑曰:“多多益善,何为为我禽?” 信曰:“陛下不能将兵,而善将将,此乃信之所以为陛下禽也。”
——《汉史·韩彭英卢吴传第四》
“韩信点兵”问题的描述(之一)是:韩信让士兵排队,站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人。于是他没有数就说出了士兵的数目。
南宋,秦九韶在《数书九章》中明确地系统地叙述了求解一次同余组的一般计算步骤。在卷一“大衍总术”中详载了计算乘率的方法——“大衍求一术”。
![](https://pic2.zhimg.com/80/v2-3f5387ced226137ae01567f6001ff875_720w.jpg)
然而我看不懂= =
(数学九章-【宋】秦九韶-免费电子书-在线阅读-网易云阅读)
明代,程大位
![](https://pic4.zhimg.com/80/v2-7c62ddd5bf41e79248a41618266432cf_720w.jpg)
在他的著作《直指算法统宗》(简称《算法统宗》)
![](https://pic3.zhimg.com/80/v2-50e42055b4d525a6af5b078dff734fbe_720w.jpg)
卷五中,提出了“孙子歌”——“三人同行七十稀,五树梅花廿一枝, 七子团圆正半月,除百令五便得知。”。
![](https://pic2.zhimg.com/80/v2-9ee7334e4e3f59da212566f68c9f9b31_720w.jpg)
实际上说的就是前文的:只要是除以3余了一个1,就加上一个70;只要是除以5余了一个1,就加上一个21;只要是除以7余了一个1,就加上一个15。然后累加。
再加上一句:计算这个总和除以105的余数。
而我只会用现代的数学语言来解释:
先考虑问题的分解:
问题1:计算一个整数 ,使得它满足除以3余2、除以5余3、除以7余2。
如果能够找到三个整数 ,使得:
除以3余2、除以5余0、除以7余0;
除以3余0、除以5余3、除以7余0;
除以3余0、除以5余0、除以7余2;
那么令 ,就很容易验证这时的
就满足除以3余2、除以5余3、除以7余2。
分别称找到整数 的问题为问题1-1、问题1-2、问题1-3。可以看出这三个问题本质上是类似的。
下面对问题1-1继续分解,如果能够找到一个整数 满足
除以3余1、除以5余0、除以7余0,那么令
,就很容易验证这时的
就满足除以3余2、除以5余0、除以7余0。
因此定义
问题1-1-1为:寻找整数 满足
除以3余1、除以5余0、除以7余0;
问题1-2-1为:寻找整数 满足
除以3余0、除以5余1、除以7余0;
问题1-3-1为:寻找整数 满足
除以3余0、除以5余0、除以7余1。
这三个问题本质上是相同的。
如果找到了 ,那么就可以取
。
下面就以问题1-1-1为例:寻找整数 使得
除以3余1、除以5余0、除以7余0。
于是 一定是
的倍数,假设
。
那么就有 ,而这时的
就是
模3的逆(参看“5÷2=6?——是的,模7意义下”),将这个
记作
,那么
就等于
,恰好就是
,对应“凡三三数之剩一,则置七十”一句及“三人同行七十稀”一句。
于是类推得到,
问题1-1-2的解答是 ,恰好就是
,对应“五五数之剩一,则置二十一”一句及“五树梅花廿一枝”一句;
问题1-1-3的解答是 ,恰好就是
,对应“七七数之剩一,则置十五”一句及“七子团圆月正半”一句。
所以将分解的问题复原,可得:
。
最后 ,注意到,如果 满足除以3余2、除以5余3、除以7余2,那么
也同样满足。
因此要计算满足要求的最小的非负整数,就只需要计算总和除以105的余数即可。——对应“除百零五便得知”一句。
下面要讨论的是:如果有多个满足要求的整数,那么它们之间有什么关系呢?
假设 都满足“除以3余a、除以5余b、除以7余c”。
观察 会发现,
满足“除以3余0、除以5余0、除以7余0”。因此
一定是
的倍数。
这也就是说,在“模105同余”的意义下,之前通过分解问题、组合解答的方法所得到的 恰恰就是唯一解。
下面把这个问题一般化:假设整数 两两互素,则对于任意的整数
,方程组
都存在整数解,且若 都满足该方程组,则必有
,其中
。
具体而言, 。
——这就是我非常看重和喜欢的中国剩余定理(Chinese remainder theorem, CRT)。