大道至简

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  0 Posts :: 7 Stories :: 0 Comments :: 0 Trackbacks

常用链接

留言簿

我参与的团队

搜索

  •  

最新评论

有一个正数N,用2除余1,用5除余2,用7除余3,用9除余4,则N的最小值是多少?
(过程尽量详细些,如果可能请告诉我剩余定理的一般用法,尽快解答,谢谢啦!)



这是有关同余的问题
理论依据:
首先先说几个基本定理
1.如果a除以b余数为c,那么na除以b余数为nc(c〈b,nc〈b)
先理解一下,a除以b余数为c,设商为x,那么a=xb+c
所以na=nxb+nc
所以na除以b余数为nc
扩展:如果a除以b余数与c除以b余数相同,那么na除以b余数与nc除以b余数相同(定理1)
2.如果a除以b余数为c,那么(a+nb)除以b余数为c(c〈b)
a除以b余数为c,设商为x,那么a=xb+c
所以a+nb=xb+nb+c
所以(a+nb)除以b余数为c
扩展:如果a除以b余数与c除以b余数相同,那么(a+nb)除以b余数与(c+nb)除以b余数相同(定理2)
3.如果a1除以b余数为c1,a2除以b余数为c2,那么(a1+a2)除以b余数为(c1+c2)
这个你自己想想吧,锻炼一下
扩展:如果a1除以b余数与c1除以b余数相同,a2除以b余数与c2除以b余数相同,那么(a1+a2)除以b余数与(c1+c2)除以b余数相同(定理3)
那么我们就可以计算了
根据以上的结论,我们可以按这样的方法做:
先分别求出但除以9余4的数
2,5,9的倍数但除以7余3的数
2,7,9的倍数但除以5余2的数
5,7,9的倍数但除以2余1的数
然后把这四个数加起来,由3可得,这就是用2除余1,用5除余2,用7除余3,用9除余4的数,根据2的变形,再用它减去2,5,7,9的公倍数,最小的就是所求的数(有点抽象,慢慢理解)
具体做法:
2,5,7的最小公倍数为70,它除以9余7,那么9余4的数可为70*7=490(7*7=49除以9余4)(定理1)
2,5,9的最小公倍数为90,它除以7余6,那么7余3的数可为90*4=360(6*4=24除以7余3)(定理1)
2,7,9的最小公倍数为126,它除以5余1,那么5余2的数可为126*2=252(1*2=2除以5余2)(定理1)
5,7,9的最小公倍数为315,它除以2余1
加起来等于1417(定理3)
2,5,7,9的最小公倍数为630
则要求的最小的数为1417-630*2=157(定理2)
----------------------------
求余也是有理可循的。
ACM1006就用到这个定理。
基本思路是这样的:
三个生理周期就好像被除数,某生理周期距离下一个高峰就相当于上题中余数。根据以上定理,针对某一生理周期,若求的另外两周期的公倍数且同时满足除以当前生理周期天数等于距离下一高峰的天数,那么根据定理3就可以知道三个数相加必为满足当前条件的那一天,最后减去他们所有的周期的最小公倍数,由定理2可知,这个数的余数不会变(针对和),所以所求的值还是满足的。最后求到最小的数,减去当前天数可得。
posted on 2010-11-12 11:16 Tony_ice 阅读(411) 评论(0)  编辑 收藏 引用