《孫子算經》中有一道題:
今有物,不知其數。三、三數之,賸二;五、五數之,賸三;七、七數之,賸二。問物幾何?
相傳漢帝劉邦欲在酒席間趁機抓拿韓信,問韓信有帶多少兵,沒料到韓信未正面回覆,僅說了他的兵士,若三個三個一數,會餘兩個,五個五個一數,會餘三個,七個七個一數,會餘兩個。劉邦摸不著頭序,不知若是此時抓了韓信,會不會反被他的將士抓了,韓信於是逃過一劫。
這就是著名的「韓信點兵」,當然也有其他不同的故事說法,但無論如何,它正是中國剩餘定理(the
Chinese Remainder Theorem, the CRT)名稱的由來。
如果先考慮簡單一點的問題:若三個三個一數,只餘一個,五個五個一數與七個七個一數都剛好數完,那麼,只要從5×7的倍數中:35、70、105、140、…,找到被3除餘1的,如70,那麼70再加減3×5×7的倍數,就會是答案,即70+105k,其中k為整數。
如果三個三個一數,餘兩個,五個五個一數與七個七個一數都剛好數完。就只要把上一則的70乘以2,再加減3×5×7的倍數,就會是答案,即2×70+105k,其中k為整數。
用同樣的方法,若要找三個三個一數會數完,五個五個一數餘三,七個七個一數也剛好數完,則從3×7的倍數中找到被5除餘1的數,例如21,再把21乘以3,加減3×5×7的倍數即可,即3×21+105k,其中k為整數。
同理,若要找三個三個一數與五個五個一數都會數完,但七個七個一數餘二的數,則從3×5的倍數中找到被7除餘1的數,例如15,再把15乘以2,加減3×5×7的倍數即可,即2×15+105k,其中k為整數。
為什麼要算上面這幾道題呢,因為只要把上面的2×70、3×21、2×15加起來,再加減3×5×7的倍數,就會是上面《孫子算經》的題目或是韓信點兵的答案了。也就是說,韓信帶的兵,應該是2×70+3×21+2×15=233再加減3×5×7的倍數,所以很有可能韓信只帶了233−2×105=23個士兵。
我們把上面的題目歸納成一般的結果,也就是中國剩餘定理:
假設m1、m2、m3、…、mn兩兩互質,且整數x被m1除餘r1,被m2除餘r2,被m3除餘r3,…,被mn除餘rn。則x有無限多解,且求解的方法為:找出(m1·m2·m3·…·mn)/mi的倍數中被mi除餘1的數ti,則x = r1t1 + r2t2 +…+ rntn + m1·m2·m3·…·mn·k,其中k為整數。
比較一下拉格朗日插值多項式的問題:
假設有一個不大於二次的多項式f(x),被x – 3除餘2,被x – 5除餘3,被x – 7除餘2,試求f(x)。
我們可以用上面解韓信點兵的想法來解這題:考慮不大於二次的多項式f1(x),被x – 3除餘1,被x – 5和x – 7整除,則可設f1(x) = a(x – 5)(x – 7),由餘式定理知,f1(3)
= 1,所以a
= 1/(3 – 5)(3 – 7)。
同理,若不大於二次的多項式f2(x),被x – 3整除,被x – 5除餘1,被x – 7整除,則可設f2(x) = b(x – 3)(x – 7),由餘式定理知,f2(5)
= 1,所以b
= 1/(5 – 3)(5 – 7)。若不大於二次的多項式f3(x),被x – 3和x – 5整除,被x – 7除餘1,則可設f3(x) = c(x – 3)(x – 5),由餘式定理知,f3(7)
= 1,所以c
= 1/(7 – 3)(7 – 5)。
於是,f(x) = 2 f1(x) + 3 f2(x) + 2 f3(x)就是答案了。
所以,我們可以說拉格朗日插值法就是中國剩餘定理的多項式版本。