初识中国余数定理 (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.
用途:频率估计?
原文地址:https://www.cnblogs.com/silentzpf/p/8387010.html
时间: 2024-11-06 09:32:07