中国剩余定理(CRT )

这次我决定简单粗暴地引入主题,因为要介绍的是我认为非常重要的、我非常喜欢的——中国剩余定理(Chinese remainder theorem, CRT) !


《孙子算经》是中国古代重要的数学著作,共三卷,成书约在四、五世纪,作者生平和具体编写年不详。

其卷下的第26题为:

今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?
答曰:‘二十三’。
术曰:三三数之剩二,置一百四十;五五数之剩三,置六十三,七七数之剩二,置三十,并之。得二百三十三,以二百一十减之,即得。凡三三数之剩一,则置七十;五五数之剩一,则置二十一;七七数之剩一,则置十五;一百六以上以一百五减之即得。

(即——

一个整数除以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人。于是他没有数就说出了士兵的数目。


南宋,秦九韶在《数书九章》中明确地系统地叙述了求解一次同余组的一般计算步骤。在卷一“大衍总术”中详载了计算乘率的方法——“大衍求一术”。

然而我看不懂= =

数学九章-【宋】秦九韶-免费电子书-在线阅读-网易云阅读


明代,程大位

(图片来自百度百科)

在他的著作《直指算法统宗》(简称《算法统宗》)

卷五中,提出了“孙子歌”——“三人同行七十稀,五树梅花廿一枝, 七子团圆正半月,除百令五便得知。”。

实际上说的就是前文的:只要是除以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)。

posted @ 2022-05-16 21:48  常给自己加个油  阅读(423)  评论(0编辑  收藏  举报