#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define endl '\n'
const double pi = acos(-1);
const int maxn = 5e4 + 10;
const int maxm = 5e5 + 10;
const ll mod = 1e9 + 7;
int x, y;
int exgcd(int a, int b){
if(b == 0){
x = 1, y = 0; return a;
}
int gcd = exgcd(b, a % b);
int t = x;
x = y;
y = t - a / b * y;
return gcd;
}
int china(int W[], int B[]){
int m, n = 1, a = 0;
for(int i = 0 ; i < 3 ; ++ i) n *= W[i];
for(int i = 0 ; i < 3 ; ++ i){
m = n / W[i];
exgcd(W[i], m);
a = (a + y * m * B[i]) % n;
}
return a > 0 ? a : a + n;
}
int main()
{
int a, b, c, n, cnt = 0;
int W[3] = {23, 28, 33};
while(~scanf("%d %d %d %d", &a, &b, &c, &n)){
if(a == b && b == c && c == n && n == -1) break;;
cnt ++;
int B[3] = {a, b, c};
int k = china(W, B);
if(k < n) k += 21252;
printf("Case %d: the next triple peak occurs in %d days.\n", cnt, k - n);
}
return 0;
}
poj1006(中国剩余定理)
最新推荐文章于 2024-01-03 16:43:35 发布