中国剩余定理(孙子定理)详解

题目引出

在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”这个问题称为“孙子问题”,该问题的一般解法国际上称为“中国剩余定理”。

解决方法

  • 1.找出三个数:从3和5的公倍数中找出被7除余1的最小数15,从3和7的公倍数中找出被5除余1 的最小数21,最后从5和7的公倍数中找出除3余1的最小数70。
  • 2.用15乘以2(2为最终结果除以7的余数),用21乘以3(3为最终结果除以5的余数),同理,用70乘以2(2为最终结果除以3的余数),然后把三个乘积相加15∗2+21∗3+70∗2得到和233。
  • 3.用233除以3,5,7三个数的最小公倍数105,得到余数23,即233%105=23。这个余数23就是符合条件的最小数。

思路探讨

为什么要这样做呢?
我们先把题目理清楚:
我们假设一个x,x为要求的数字
那么根据题意:x%3 = 2,x%5 = 3,x%7 = 2

  • 我们假设一个x1,x2,x3,其中三个未知数满足以下条件
  • 一:x1%3 = 2
  • 二:x2%5 = 3(假设三个未知数与上面的x没有联系)
  • 三:x3%7 = 2
    我们假设,如果(x1+x2)%3 = 2的话,那x2必为3的倍数
    同理就可以得到(x1+x3)%3 = 2的话,那x3必为3的倍数

如此下来可以假设到:

x1为5和7的倍数
x2为3和7的倍数
x3为3和5的倍数

那么我们可以发现,是不是把x1和x2,x3加起来就是x的解?
(x1+x2+x3)%3 = x1%3 = 2(因为x2,x3是3的倍数)
(x1+x2+x3)%5 = x2%5 = 3(因为x1,x3是5的倍数)
(x1+x2+x3)%7 = x3%7 = 2(因为x1,x2是7的倍数)

既然我们找到了x,那怎么求解x1,x2,x3?

在这里我们先引用一个定理:
如果a%b=c,那么ka%b=a%b+a%b…(k个a%b)…+a%b=kc(k为常数)(把c=a%b代入公式)

因为x1是5和7的倍数,那x1可以用35 *k1表示(x1=35 *k1)
所以35 *k1%3 = 2
那么35 *k1 *1/2%3=1(k1乘以1/2)
那么再转换就可以得出35 *k1 *1/2= 1 mod(3)(没错,这个就化成了费马小定理求逆元)
至此,k1就求出了,再用x1=35 *k1求出x1。
同理可求出k2,k3

那x真的只是(x1+x2+x3)?
答案是否定的
应该是(x1+x2+x3)%(3 *5 *7)

--------------------------------------------------------------------------------------------------------------------------

原题解答

根据上面的推导,原题的
35 *k1 *1/2%3=1算出的k1为4
21 *k2 *1/3%5=1算出的k2为3
15 *k3 *1/2%7=1算出的k3为2
那么x=(x1+x2+x3)=(35 *k1 + 21 *k2 + 15 *k3)=(35 *4+21 *3+15 *2)=233
x%(3 *5 *7)=233%105=23
则问题的答案为23
--------------------------------------------------------------------------------------------------------------------------

方法延伸

如果有k组数要你求x呢?
比如
x除以m1得到a1
x除以m2得到a2

x除以mk得到ak
此时要你求x该怎么求?
我们来看上面得到的x1
x1=35 *k1
35=5 *7
那么35可以简单看做除了3之外所有除数的乘积
k1可以看做35关于3的逆元(35 *k *1/2%3=1)···下面有引用

e对于phi的模逆元素d可以表示为:
e*d ≡1(mod phi)(取自我的上一篇博客RSA)

所以x1-xk的所有表达可为(这里使用上面m1,a1,k条件)

x=(M1*a1 *M1-1+M2 *a2 *M2-1…+Mk *ak *MK-1
(其中M=m1 *m2 *… *mk
(Mi=M/mi
(Mi-1是Mi关于模mi的逆元)

可能看起来有点晦涩难懂,遂给出点解释希望能容易懂一点
解释:
先来看看第一个:M1*a1 *M1-1
M1=M/m1(因为Mi=M/mi
而M=m1 *m2 *… *mk
遂M1=m2 *m3 *… *mk(没有m1)是不是就是上面说的35的拆解

再来看看第二和第三个:a1 *M1-1
因为M1-1=M1关于模m1的逆元(再在前面乘个a1)
上个式子可以简单表示为M1 *a1 *M1-1%m1=1
再看看下面的这个

k1可以看做35关于3的逆元(35 *k~1~ *1/2%3=1)

这个k1可以这么化解呢?
把k1 *1/2看成一个整体,35是不是可以看成M1?(原因见上面棕字)3不就是m1?(这还要我解释吗?)
然后再看这个公式:M1 * a1 *M1-1%m1=1
是不是k1 *1/2就是a1 *M1-1
而1/2可以看做a1
k1上面也有说明是可以看做M1-1

至此第一个:M1*a1 *M1-1便解释清楚了,后面的第二个第三个一次类推于是构成了中国剩余定理公式

在这里插入图片描述

文章部分内容参考自:https://www.cnblogs.com/MashiroSky/p/5918158.html,侵删

  • 20
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值