题目愿意就是要求出一个n使得
(n+d)%23=p; (n+d)%28=e; (n+d)%33=i ,求n 。
然后通过中国剩余定理推公式变成
n =(5544*p+14421*e+1288*i-d+21252)%21252;
其中 21252 为23,28,33的最小公倍数,而 5544 等是 令 28*33*x % 23 = 1;推导出来,5544即等于28*33*x;其他方法相同
附上解题代码:
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <map>
#include <vector>
#include <set>
#include <stack>
#include <queue>
using namespace std;
int main()
{
int p,e,i,d;
int n;
int cas = 0;
while(~scanf("%d%d%d%d",&p,&e,&i,&d)&&
!(p == -1 && e == -1 && i == -1 && e == -1))
{
cas++;
n = (5544*p + 14421*e + 1288*i - d +21252)%21252;
if(n == 0)
n = 21252;
printf("Case %d: the next triple peak occurs in %d days.\n",cas,n);
}
return 0;
}