证明
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int m[4],a[4];
void exgcd(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1;
y=0;
return;
}
else
{
exgcd(b,a%b,x,y);
int tmp;
tmp=x;
x=y;
y=tmp-(a/b)*y;
}
}
int CRT(int n)//
{
int M=1;
int ans=0;
for(int i=1;i<=n;i++)
M*=m[i];
for(int i=1;i<=n;i++)
{
int x,y;
int Mi=M/m[i];
//Mixi=1(mod mi)
exgcd(Mi,m[i],x,y);//求Mi关于模mi的逆元
ans=(ans+Mi*x*a[i])%M;
}
if(ans<0)
ans+=M;//有模M的唯一解
return ans;
}
int main()
{
int cas=0,p,e,i,d; //
while(cin>>p>>e>>i>>d)
{
if(p==-1&&e==-1&&i==-1&&d==-1)
break;
cas++;
// ans为tri peak
// ans=p+23k1 周期为23,最值为在p出现
// ans=e+28k2
// ans=i+33k3;
// x和p同余23 x和e同余28 x和i同余33
m[1]=23;
m[2]=28;
m[3]=33;
a[1]=p;
a[2]=e;
a[3]=i;
int ans=CRT(3);
if(ans<=d)
ans+=21252;
printf("Case %d: the next triple peak occurs in %d days.\n",cas,ans-d);
}
return 0;
}