标题：剩余定理
问题叙述
在我国古代劳动人民中，长期流传着“隔墙算”、“剪管术”、“秦王暗点兵”等数学游戏。
我国公元四世纪的数学著作《孙子算经》卷下记载：
物不知数
今有物不知其数，三三数之剩二，五五数之剩三，七七数之剩二，问物几何？
即，求一个数，除以3余2，除以5余3，除以7余2。
这个被称做孙子问题。
孙子算经之解法
《孙子算经》所给答案是N＝23。由于孙子问题数据比较简单，这个答数通过试算也可以得到。但是《孙子算经》并不是这样做的。
“物不知数”题的术文指出的解法为：
三三数之，取数七十，与余数二相乘；五五数之，取数二十一，与余数三相乘；七七数之，取数十五，与余数二相乘。将诸乘积相加，然后减去一百零五的倍数。列成算式就是：
N＝70×2＋21×3＋15×2－2×105。
有一首口诀就描述了孙子问题的解法：
孙子歌
三人同行七十稀，五树梅花廿一枝，
七子团圆正半月，除百令五便得知。
孙子算法的关键，在于70、21和15这三个数的确定。后来流传的《孙子歌》中所说“七十稀”、“廿一枝”和“正半月”，就是暗指这三个关键的数字。《孙子算经》没有说明这三个数的来历。
现代数论求解
孙子问题在现代数论中是一个一次同余问题，显然，这相当于求不定方程组
N=3x+2
N=5y+3
N=7z+2
的正整数解N，或用现代数论符号表示，等价于解下列的一次同余组：
N 2(mod3) 3(mod5) 2(mod7)②
孙子问题求解过程如下：  最小公倍数
在第一组数中找出“除以7余2”的最小数——30；
在第二组数中找出“除以5余3”的最小数——63；
在第三组数中找出“除以3余2”的最小数——35；
则有，30+63+35 = 128 一定是一个符合“被3除余2，被5除余3，被7除余2”的数。但不一定是最小的。
再求128除以105(即3，5，7的最小公倍数)的余数即得23。
为了一般化问题的解法，先来看一个简单的结论：
如果整数 a 除以整数 b 的余数是 1，那么 a 的 2 倍，3 倍，4 倍……b-1 倍除以 b 的余数分别是 1*1，2*1，3*1，4*1，......和(b-1)*1。
例如：15÷7=2……余1，那么：
2*15÷7=4……余 2 (=2*1)
3*15÷7=6……余 3 (=3*1)
4*15÷7=8……余 4 (=4*1)
……
6*15÷7=12……余 6 (=6*1)
基于以上结论，可以如是求解（仍要看上图）：
在第一组中找出 ”除以7余1“ 的最小数－－15
在第二组中找出 “除以5余1” 的最小数－－21
在第三组中找出 “除以3余1" 的最小数－－70
要找的数是 “除以7余2，除以5余3，除以3余2” ，因此一个答案就是
15*2 + 21*3 + 70*2 ＝ 233
要求最小的那个数，只要求233除以105（即3，5，7的最小公倍数）的余数，即23。
背景介绍
孙子问题出现在公元四世纪的中国算书中，这并不是偶然的。我国古代天文历法资料表明，一次同余问题的研究，明显地受到天文、历法需要的推动，特别是和 古代历法中所谓“上元积年”的计算密切相关。大家知道，一部历法，需要规定一个起算时间，我国古代历算家把这个起点叫做“历元”或“上元”，并且把从历元到编历 年所累积的时间叫做“上元积年”。上元积年的推算需要求解一组一次同余式。以公元三世纪三国时期魏国施行的《景初历》做例，这部历法规定以冬至、朔旦（朔日子夜）和甲子日零时会合的时刻作为历元。设a是一回归年日数，b是一朔望月日数，当年冬至距甲子日零时是R1日，离平朔时刻是R2日，那么《景初历》上元积元数N就是同余组
aN≡Ri（mod60）≡R2（modb）
的解。到了南北朝时期，祖冲之《大明历》（公元462年）更要求历元必须同时是甲子年的开始，而且“日月合璧”、“五星联珠”（就是日、月、五大行星处在同一方位），月亮又恰好行经它的近地点和升交点。这样的条件下推算上元积年，就相当于要求解十个同余式了。天文历法数据一般又都十分庞杂，所以，在《孙子算经》成书前后的魏晋南北朝时期，我国的天文历算家无疑已经能够求解形式比《孙子算经》“物不知数”题复杂得多的一次同余式，因而必定掌握了按一定程序计算一次同余式的方法。《孙子算经》比例题的形式总结、反映了这一事实。以后天文历算家长期沿用孙子算法推算上元积年，这中间肯定会引起更加深入的探讨。到公元十三世纪，大数学家秦九韶集前法之大成，终于在一次同余式的研究上获得了超越前人的辉煌成果。
秦九韶，字道古，生活于南宋时期，自幼喜好数学，经过长期积累和苦心钻研，于公元1247年写成《数书九章》。这部中世纪的数学杰作，在许多方面都有创造，其中求解一次同余组的“大衍求一术”和求高次方程数值解的“正负开方术”，更是具有世界意义的成就。
这里主要介绍秦九韶对一次同余论的伟大贡献。
秦九韶在《数书九章》中明确地系统地叙述了求解一次同余组的一般计算步骤。秦的方法，正是前述的剩余定理。我们知道，剩余定理把一般的一
的一组数Ki的选定。秦九韶给这些数起名叫“乘率”，并且在《数书九章》卷一“大衍总术”中详载了计算乘率的方法——“大衍求一术”。
为了介绍“大衍求一术”，我们以任一乘率ki的计算作例。
如果Gi≡gi（modai），
于是kiGi≡Kigi（modai），
但是因为kiGi≡1（modai），
所以问题归结为求ki使适合kigi≡1（modai）。秦九韶把ai叫“定数”，gi叫“奇数”，他的“大衍求一术”，用现代语言解释，实际就是把奇数 gi和定数ai辗转相除，相继得商数q1、q2、……qn和余数r1、r2、……rn，在辗转相除的时候，随即算出下面右列的c值：
1，20
定ai
27
1，
gi
1，20
c1=q1，
r2
1，7
(q1)
(q2)
c2=c1q2+1，
r2
3，6
c1，
r1
1，7
cn-2，
rn-2
3，6
cn-1=cn-2qn-1+cn-3，
rn-1
4，1
(qn-1)
(qn)
cn=cn-1qn+cn-2，
1
23，1
cn-1，
rn-1
4，1
秦九韶指出，当rn＝1而n是偶数的时候，最后得到的cn就是所求乘率ki。如果r1＝1而n是奇数，那么把rn-1和rn相除，形式上令qn＋1＝rn- 1－1，那么余数rn＋1仍旧是1，再作cn+1=qn+1Cn+Cn-1，这时n＋1是偶数，cn＋1就是所求的ki。不论哪种情形，最后一步都出现余数1，整个计算到此终止，秦九韶因此把他的方法叫做“求一术”（至于“大衍”的意思，秦九韶本人在《数书九章》序中把它和《周易》“大衍之数”相附会）。可以证明，秦九韶这一算法是完全正确，十分严密的式。
在秦九韶那个时代，计算仍然使用算筹。秦九韶在一个小方盘上，右上布置奇数g，右下布置定数a，左上置1（他叫它做“天元1”），然后在右行上下交互以少除多，所得商数和左上（或下）相乘并入左下（或上），直到右上方出现1为止。下页就是秦九韶的一般筹算图式，右边是一个数字例子（g＝20，a＝27，K＝ c4＝23）。
秦九韶在《数书九章》中采集了大量例题，如“古历会积”、“积尺寻源”、“推计土功”、“程行计地”等等，广泛应用大衍求一术来解决历法、工程、赋役和军旅等实际问题。在这些实际问题中，模数ai并不总是两两互素的整数。秦九韶区分了“元数”（ai是整数）、“收数”（ai是小数）、“通数”（ai是分数）等不同情形，并且对每种情形给出了处理方法。 “大衍总术”把“收数”和“通数”化成“元数”的情形来计算，而对于元数不两两互素的情形，给出了可靠的程序，适当选取那些元数的因子作定数而把问题归结为两两互素的情形。所有这些系统的理论，周密的考虑，即使以今天的眼光看来也很不简单，充分显示了秦九韶高超的数学水平和计算技巧。
秦九韶小时曾跟随他父亲到南宋京城杭州，向太史局（主管天文历法的机构）的官员学习天文历法，“大衍求一术”很可能就是他总结天文历法计算上元积年方法的结果。但是“大衍求一术”似乎没有为他同时代的人所充分理解。明中叶以后几乎失传。一直到清代，“大衍求一术”又重新被发掘出来，引起了许多学者（张敦仁、李锐、骆腾凤、黄宗宪等）的兴趣。他们对“大衍求一术” 进行了解释、改进和简化，其中黄宗宪《求一术通解》对模数非两两互素的情形给出了更加简明的方法，但是时代已是晚清。
从《孙子算经》“物不知数”题到秦九韶的“大衍求一术”，我国古代数学家对一次同余式的研究，不仅在中国数学史上而且在世界数学史上占有光荣的地位。在欧洲，最早接触一次同余式的，是和秦九韶同时代的意大利数学家裴波那契（1170—1250），他在《算法之书》中给出了两个一次同余问题，但是没有一般的算法。这两个问题从形式到数据都和孙子物不知数题相仿，整个水平没有超过《孙子算经》。直到十八、十九世纪，大数学家欧拉（1707—1783）于公元1743年、高斯（1777—1855）于公元1801年对一般一次同余式进行了详细研究，才重新获得和秦九韶“大衍求一术”相同的定理，并且对模数两两互素的情形给出了严格证明。欧拉和高斯事先并不知道中国人的工作。公元1852年英国传教士伟烈亚力（1815—1887）发表《中国科学摘记》，介绍了《孙子算经》物不知数题和秦九韶的解法，引起了欧洲学者的重视。1876年，德国马蒂生（1830—1906）首先指出孙子问题的解法和高斯方法一致，当时德国著名数学史家康托（1829—1920）看到马蒂生的文章以后，高度评价了“大衍术”，并且称赞发现这一方法的中国数学家是“最幸运的天才”。直到今天，“大衍求一术”仍然引起西方数学史家浓厚的研究兴趣。如1973年，美国出版的一部数学史专著《十三世纪的中国数学》中，系统介绍了中国学者在一次同余论方面的成就，作者力勃雷希（比利时人）在评论秦九韶的贡献的时候说道：“秦九韶在不定分析方面的著作时代颇早，考虑到这一点，我们就会看到，萨顿②称秦九韶为‘他那个民族、他那个时代、并且确实也是所有时代最伟大的数学家之一’，是毫不夸张的。”
印度学者对一次同余论也有过重要贡献。从公元六世纪到十二世纪，他们发展了一种称为“库塔卡”的算法，用来求解和一次同余式等价的不定方程组。“库塔卡”法出现在孙子算法之后，印度数学家婆罗门笈多（七世纪）、摩柯吠罗（九世纪）等人的著作中，都有和物不知数题相同的一次同余问题。这当然不是要借此断言“库塔卡”法一定受到了孙子算法的影响，但是有人（如万海依等）硬说中国的“大衍求一术”来源于“库塔卡”，就是毫无根据的妄说了。万海依居然把中国算法中数码从左到右横写作为“大衍术”受印度影响的重要根据。大家知道，中国古代至迟从春秋战国时期就开始使用算筹记数，我们今天还可以从现存的公元前三世纪的货币上看到这种从左到右的记数方法。由此可见，万海依的论点多么荒唐可笑。中国古代数学家对一次同余论的研究有明显的独创性和继承性，“大衍求一术”在世界数学史上的崇高地位是毋容置疑的，正因为这样，在西方数学史著作中，一直公正地称求解一次同余组的剩余定理为“中国剩余定理”。