poj1006 Biorhythms
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int x,y;
int extended_gcd(int a,int b)
{
int t,gcd;
if(b==0)
{
x=1;
y=0;
return a;
}
gcd=extended_gcd(b,a%b);
t=x;
x=y;
y=t-a/b*y;
return gcd;
}
int main()
{
int a[3],d;
int i;
int m[3]={23,28,33};
int M;
int w;
int res;
int k=1;
while(1)
{
M=1;
res=0;
scanf("%d %d %d %d",&a[0],&a[1],&a[2],&d);
if(a[0]==-1&&a[1]==-1&&a[2]==-1&&d==-1)
{
break;
}
for(i=0;i<3;i++)
{
a[i]=a[i]%m[i];
}
for(i=0;i<3;i++)
{
M*=m[i];
}
for(i=0;i<3;i++)
{
w=M/m[i];
extended_gcd(m[i],w);
res=(res+a[i]*y*w)%M;
}
while(res-d<=0)
{
res+=M;
}
printf("Case %d: the next triple peak occurs in %d days.\n",k++,res-d);
}
return 0;
}