初識中國余數定理 (Chinese Remainder Theorem)
中國余數定理介紹
起源:
在《孫子算經》中有這樣一個問題:
“今有物不知其數,三三數之剩二(除以3余2),五五數之剩三(除以5余3),七七數之剩二(除以7余2),問物幾何?”
這個問題稱為“孫子問題”,該問題的一般解法國際上稱為“中國剩余定理”。
解法:
設未知數為X
1. 找到三個數:
1). 從3和5的公倍數中找到被7除余1的數,15;
2). 從5和7的公倍數中找到被3除余1的數,70;
3). 從3和7的公倍數中找到被5除余1的數,21。
2. 用第1步得到的三個數除以響應的余數:
1). 15乘以2(2為X除以7的余數),30;
2). 70乘以2(2為X除以3的余數),140;
3). 21乘以3(3為X除以5的余數),63。
將三個乘積結果相加,30 + 140 + 63 = 233。
3. 用第2步結果除以三個數的最小公倍數的余數即為所求結果
X = mod(233,105) = 23
原理:
前提已知:
前提1. if a % b = c, then (a + kb) % b = c;
前提2. if a % b = c, then 2a % 2b = 2c.
則由此
1. 設n1, n2, n3分別為除3, 5, 7分別余2, 3, 2的數,
1). n1 % 3 = 2;
2). n2 % 5 = 3;
3). n3 % 7 = 2.
則問題變為能否找到數n1+n2+n3滿足條件
1). (n1+n2+n3) % 3 = 2;
2). (n1+n2+n3) % 5 = 3;
3). (n1+n2+n3) % 7 = 2.
2. 可見,當
1). n2與n3是3的倍數,條件1成立;
2). n1與n3是5的倍數,條件2成立;
3). n1與n2是7的倍數,條件3成立。
3. 此時有
1). n1為5與7的公倍數;
2). n2為3與7的公倍數;
3). n3為3與5的公倍數。
4. 結合1中的前提
1). n1為5與7的公倍數,並且除以3余2,為140;
2). n2為3與7的公倍數,並且除以5余3,為63;
3). n3為3與5的公倍數,並且除以7余2,為30。
PS:注,此時古人采用了已知前提的第二個條件,先求余1數,再乘相應余數值得到想要的數值。
5. n1+n2+n3即為想要的數值,但是這個數值不是最小的滿足條件的數值,此時利用已知前提1,可以得到
(n1+n2+n3) = 140+62+30 = 233;
233對3,5,7的最小公倍數105取模得到最終結果
233 % 105 = 23.
