《孙子算经》里有这样一个问题,“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”,解决这个问题的方法称为中国剩余定理,也叫孙子定理。中国古代还有一个叫做“韩信点兵”的问题,和这个问题本质是一样的。
很明显这个物应该有无数组解,我们先写几个数找一下规律。
(1)模3余2:2,5,8,11,14,17,20,23,26,29........
(2)模5余3:3,8,13,18,23,28.......
(3)模7余2:2,9,16,23,30,37.......
很明显找到一个23满足题意,怎么把解的一般表达式写出来呢?我们设(23+n)也满足题意,这个n必须要同时是3,5,7的倍数才行。这是因为如果a%b=c,那么(a+k*b)%b=c。我们让n=lcm(3,5,7)=105,所以解的形式应该是(23+105*k)。
但是孙子算经却不是这么解决的,有一个口诀叫做“三人同行七十稀,五树梅花二十一,七子团圆正半月,减百零五便得知”。把这四句话翻译成数学语言,最后的答案就是(70*a+21*b+15*c-105*k),这里的a,b,c是带余除法中的余数,也就是2,3,2。这里的70,21,15是什么意思,我先简单解释一下,下面再给出详细的论证。70就是5,7的倍数,且模3等于1,因为最后要求余2,所以我们乘了2。21,15的意义同理。
下面论证一下以上问题的数学解释:
我们把上述问题分解成三个问题。假设整数p只满足“三三数之剩二”,q只满足“五五数之剩三”,r只满足“七七数之剩二”,则可令
p=3*k1+2,q=5*k2+3,r=7*k3+2,假设整数(p+q+r)同时满足上述3个条件,那我们可以推出
(1)(p+q+r)%3=2
(2)(p+q+r)%5=3
(3)(p+q+r)%7=2
根据a%b=c => (a+k*b)%b=c,再结合以上三个等式就可以得出p,q,r满足的条件是
p%3=2且p是5和7的倍数;q%5=3且q是3和7的倍数;r%7=2且r是3和5的倍数。
再谈谈怎么具体找这个p,q,r,比如p,本来的想法是在5和7的公倍数里找一个模3等于2的数,但是调整一下策略,在5和7的公倍数里找一个模3等于1的数,然后乘以2,也就是乘余数。我们把5和7的公倍数设为(35*k)。
35*k%3=1 =>
(mod3),前面这个东西它的含义就是35*k和1这俩数,模3的余数相同,它的充要条件是(35*k-1)是3的倍数。枚举一下k即可。如果再严谨一些,我们可以设35*k-1=3*t,移项以后变形为35*k-3*t=1,问题变成不定方程组求解了。根据扩展欧几里得算法,方程有解,必须满足gcd(k,t)=1;所以k和t必须互素,在这种条件下,k的取值是唯一的。