初识中国余数定理 (Chinese Remainder Theorem)

初识中国余数定理 (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.

用途:频率估计?

posted @ 2018-01-30 19:57  听雨观风的海角  阅读(8093)  评论(0编辑  收藏  举报