水清无鱼

追求更高!!!!!!!!!!!!!!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

怎样理解中国余数定理

Posted on 2012-05-09 21:14  水清无鱼  阅读(675)  评论(0)    收藏  举报

找出能被a1, a2, a3.....an(它们都是两两负为质数)除时余数分别为b1,b2,b3.....bn的所有整数?

要使得该整数能被除ai以外的其他数整除,但又要除ai时余数为bi, 则有 sumi = a1*a2*.......*an(除ai)的整数倍然后除以ai1, 然而此处所求得sumiajj=1234.....ni以外)的整数倍;最后sumi = sumi * bi 即就是所求的一个数除aibi,但又一定能被其他的ajj=1234......i以外)的数整除;所以最后将其中每一个sum = sum1 + sum2 + sum3 +......+sumn sum相加即可得到所需求解的一个满足条件的数,即最后所求的整数有 mark = sum + t * a1*a2*a3*......*an)此处的t为任意的整数。

所以POJ 1006有:

#include <iostream>

using namespace std;int mo(int a, int b, int c) { int p, i; p = a * b; i = p; while(1) { if(p%c == 1) return p; else p += i; }}int main() { int a, b, c, d, e, pa, j = 1; while(cin >> a >> b >> c >>d && !(a==-1 && b==-1 && c==-1 && d==-1)) { pa = (mo(33, 28, 23)* a + mo(23, 33, 28) * b + mo(23, 28, 33) * c - d + 21252)%21252; if(pa == 0) pa = 21252; printf("Case %d: the next triple peak occurs in %d days.\n", j++, pa); } return 0;}