在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”这个问题称为“孙子问题”,该问题的一般解法国际上称为“中国剩余定理”。
用到数学公式:
① 如果a%b=c,那么如果x%b=c/2,此时x=a/2;
也就是说除数相等时,被除数和余数是成比例的。
② 如果a%b=c,那么 (a + k*b)%b=c,其中k为整数
具体解法:
- 在3和5的公倍数中找出除以7余1的最小数(15)
在3和7的公倍数中找出除以5余1的最小数(21)
在5和7的公倍数中找出除以3余1的最小数(70)
总结:假设整数m1,m2,…,mn两两互质;
M=m1×m2×⋯×mn,即M是整数m1,m2,…,mn的乘积;
并设Mi=M/mi,∀i∈{1,2,3,…,n}是除了mi以外的n−1个整数的乘积;
设ti是Mi模mi下的逆元。
此步即求ti。
- 用15乘以2(2为最终结果除以7的余数),
用21乘以3(3为最终结果除以5的余数),
用70乘以2(2为最终结果除以3的余数),
然后把三个乘积相加15∗2+21∗3+70∗2得到和233。
总结:可以把中国剩余定理(Chinese Remainder Theorem, CRT)求解,表示如下形式的一元线性同余方程组(其中n1,n2,…,nk两两互质)。
结合步骤1的总结,此一元线性同余方程的解为:
3. 用233除以3、5、7的最小公倍数105,得到余数23,这个余数23就是符合条件的最小数。
总结:在模M的意义下,方程组的只有一个解,即
算法流程:
- 计算所有模数的积n;
- 对于第i个方程:
- 方程组的唯一解为:
关于中国剩余定理的几个定理:
一次同余方程如:ax ≡b(mod m),求解一次同余方程的问题为是否存在x, y 使得b = ax + ym, 若存在,则方程有解。且方程有解的充分必要条件是(a,m)| b.
定理1:若(a,m)=1,则ax ≡b(mod m)有解,且解唯一;
定理2:如果同余方程ax ≡b(mod m)有解,则解的数目为(a,m),且若x0其一特解,它的所有解为
定理3:中国剩余定理(Chinese Remainder Theorem, CRT),假设整数m1,m2,…,mk两两互质; m=m1×m2×⋯×mk = miMi (1≤i≤k),那么对于任意的a1,a2,…,ak一次同余方程组x ≡ai(mod mi), (1≤i≤k) 必有解,有且只有一个解,可表示为: