找出能被a1, a2, a3.....an(它们都是两两负为质数)除时余数分别为b1,b2,b3.....bn的所有整数?
要使得该整数能被除ai以外的其他数整除,但又要除ai时余数为bi, 则有 sumi = a1*a2*.......*an(除ai)的整数倍然后除以ai余1, 然而此处所求得sumi是aj(j=1,2,3,4,.....n除i以外)的整数倍;最后sumi = sumi * bi 即就是所求的一个数除ai余bi,但又一定能被其他的aj(j=1,2,3,4......除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;}
浙公网安备 33010602011771号