poj1006生理周期(中国剩余定理)

时间:2023-12-21 09:28:02
 /*
中国剩余定理可以描述为:
若某数x分别被d1、、…、dn除得的余数为r1、r2、…、rn,则可表示为下式:
x=R1r1+R2r2+…+Rnrn+RD
其中R1是d2、d3、…、dn的公倍数,而且被d1除,余数为1;(称为R1相对于d1的数论倒数)
R1 、
R2 、
… 、
Rn是d1、d2、…、dn-1的公倍数,而且被dn除,余数为1;
D是d1、d2、…、的最小公倍数;
R是任意整数(代表倍数),可根据实际需要决定;
且d1、、…、必须互质,以保证每个Ri(i=1,2,…,n)都能求得.
*/
#include<iostream>
using namespace std;
int main(){
int a, b, c, d;
int cnt=;
int x23=, x13=, x12=, x=;
//x23为b,c的公倍数, 且x23%==1 x23为a,c的公倍数, 且x23%==1 x13为a,b的公倍数, 且x12%c==1
//a, b, c 为余数
while(cin>>a>>b>>c>>d && a!=-){
int res=(a*x23 + b*x13 + c*x12) % x;
res-=d;
if(res<=)
res=(res+x-)%x+;
cout<<"Case "<<++cnt<<": the next triple peak occurs in "<<res<<" days."<<endl;
}
return ;
}