中国剩余定理的详解与应用

对于中国剩余定理,博主看过很多人的文章,但认为他们讲的过于生疏,希望我能讲的更明白,通俗些,全文无代码嵌入,通俗理论。


引子:

在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”

题意为:求一个数x,使x除以3余2,除以5余3,除以7余2.


这个问题称为“孙子问题”,该问题的一般解法国际上称为“中国剩余定理”。分三步:

1.求出3和5的最小公倍数且15,求出5和7的最小公倍数35,求出3和7的最小公倍数21;

2.找出一个最小数使其除以7余2且为15的倍数  30

   找出一个最小数使其除以5余3且为21的倍数  63

   找出一个最小数使其除以3余2且为35的倍数  140

    三者相加得:30+63+140=233

3.3,5,7的最小公倍数为105,让233除以105取它的余数 得 23

经验证发现,23确实满足条件,为最小的数!

我们在惊叹古人智慧的同时,也在好奇这其中蕴藏着怎样的奥秘,我们一探究竟。



再开始正解前,需要了解两个基本定理:

 如果有a%b=c,则有(a+或-k∗b)%b=c    k为非零整数                             ——————1式

翻译:如果一个除法运算的余数为c,那么被除数与k倍的除数相加(或相减)的和(差)再与除数相除,余数不变。

如果a%b=c,那么(a∗k)%b=a%b+a%b+…+a%b=c+c+…+c=k∗c(k>0)  ——————2式

翻译:如果一个除法的余数为c,那么被除数的k倍与除数相除的余数为k∗c。展开式中已证明。实际上,公式2也能用公式1推导出来

正解

首先设n1除以3余2,设n2除以5余3,设n3除以7余2;

n1 为 3∗k+2(k>=0) n2为 5∗k+3(k>=0) n3 为 7∗k+2(k>=0) 

假设n1+n2的和同样除以3余2,那么由公式1得 n2相当于 kb,b已知为3,k为常数,则n2为3的倍数。同理若要n1+n2+n3为3的倍数,则n3也必须是3的倍数,在这里我们以n1为中心来讨论的。

对于以n2,n3的讨论同上,读者请自行思考,综上可以得出:

  1. 为使n1+n2+n3的和满足除以3余2,n2和n3必须是3的倍数。
  2. 为使n1+n2+n3的和满足除以5余3,n1和n3必须是5的倍数。
  3. 为使n1+n2+n3的和满足除以7余2,n1和n2必须是7的倍数。

综上题目要求和讨论结果,又可以得出:

  1. n1必须除以3余2,且必须是5和7的公倍数。
  2. n2必须除以5余3,且必须是3和7的公倍数。
  3. n3必须除以7余2,且必须是3和5的公倍数。

再看看上面《孙子算经》的一道题,本质是从5和7的公倍数中找一个除以3余2的数n1,从3和7的公倍数中找一个除以5余3的数n2,从3和5的公倍数中找一个除以7余2的数n3,再将三个数相加得到解。真聪明,古人的奥妙已被破解。


在这里有一个小技巧,例如在从5和7的公倍数中直接找一个除以3余2的数的过程中,我们可以先找除以3余1的数,找到之后再乘以二。为什么?请看公式2,看不懂就废了。


注意:

这里求出的n1+n2+n3不一定是最小的数,比如还是上面这道题,和为233,满足但不是最小,那怎么求最小呢?

还是请看公式,1,这里我们把除数当做105,那么减去两个105,余数根据公式1也不变吧,所以233-210得23,自此,题目真正理解解决

应用:

题意:

  人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天。一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最好。通常这三个周期的峰值不会是同一天。现在给出三个日期,分别对应于体力,情感,智力出现峰值的日期。然后再给出一个起始日期,要求从这一天开始,算出最少再过多少天后三个峰值同时出现。

分析:

  首先我们要知道,任意两个峰值之间一定相距整数倍的周期。假设一年的第N天达到峰值,则下次达到峰值的时间为N+Tk(T是周期,k是任意正整数)。所以,三个峰值同时出现的那一天(S)应满足

S=N1+T1∗k1=N2+T2∗k2=N3+T3∗k3

  N1,N2,N3分别为为体力,情感,智力出现峰值的日期, T1,T2,分别为体力,情感,智力周期。 我们需要求出k1,k2,k3三个非负整数使上面的等式成立。

  想直接求出k1,k2,k3貌似很难,但是我们的目的是求出S, 可以考虑从结果逆推。根据上面的等式,S满足三个要求:除以T1余数为N1,除以T2余数为N2,除以T3余数为N3。这样我们就把问题转化为求一个最小数,该数除以T1余N1,除以T2余N2,除以T3余N3。这就是著名的中国剩余定理,我们的老祖宗在几千年前已经对这个问题想出了一个精妙的解法。依据此解法的算法,时间复杂度可达到O(1)。 

END~~~

        希望大家能够理解,若是竞赛生就好好参加竞赛,静下心来学习,不负自己........

其他博主的笔记分享:

高速公路 ->中国剩余定理学习笔记 - MashiroSky - 博客园先看一道poj上的题目:【poj1006】 Biorhythms 题意: 人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天。一个周期内有一天为峰值,在这一天,人在对应的方https://www.cnblogs.com/MashiroSky/p/5918158.html

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Korloa

感谢有你陪伴

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值