#include
#include
using namespace std;
const int maxn = 5;
int arr[maxn];
int brr[maxn];
int cnt;
void ex_gcd(int a, int b, int &d, int &x, int &y)
{
if(b == 0)
{
x = 1;
y = 0;
d = a;
return;
}
else
{
ex_gcd(b, a%b, d, x, y);
int tmp = x;
x = y;
y = tmp - y*(a/b);
}
}
int intChina(int r)
{
cnt = 1;
int cnt1, x0, y0, d, ans = 0;
for(int i = 1; i <= r; ++i)
cnt *= brr[i];
for(int i = 1; i <= r; ++i)
{
cnt1 = cnt/brr[i];
ex_gcd(cnt1, brr[i], d, x0, y0);
ans = (ans + cnt1*x0*arr[i])%cnt;
}
if(ans < 0)
ans += cnt;
return ans;
}
int main()
{
int ncs = 0;
int a, b, c, d;
getchar();
while(scanf(\"%d %d %d %d\", &a, &b, &c, &d) != EOF)
{
ncs ++;
if(a == -1 && b == -1 && c == -1 && d == -1)
break;
arr[1] = a, arr[2] = b, arr[3] = c;
brr[1] = 23, brr[2] = 28, brr[3] = 33;
int ans = intChina(3);
if(a == b == c == d)
printf("Case %d: the next triple peak occurs in 21252 days.\n", ncs);
else
{
while(ans < d)
ans += cnt;
printf(\"Case %d: the next triple peak occurs in %d days.\n", ncs, ans-d);
}
}
return 0;
}
中国余数定理:HDU1370
最新推荐文章于 2021-08-20 23:04:22 发布