题目大意:
人的激素,情感,和智商分别由三个不同的周期,在周期的最后一天达到顶峰,三个周期分别是23,28,33.
现在给你三个周期上一次达到顶峰的时间批p,e,i,和当前的时间d要你求还有多少天后三个周期同时达到顶峰;
解题思路:
假设还有x天;
则:(x+d)%p=23、(x+d)%e=28、(x+d)%i=33;一看这部就是中国剩余定理了吗;
so!!!!上个代码,不知都神马是中国剩余定理的先看我的上一篇中国剩余定理
#include<stdio.h>
int m[4]={0,23,28,33},M,a[4],gcd[4];
void exgcd(int a,int b,int &d,int &x,int &y){
if(b==0){
x=1;
y=0;
d=a;
return ;
}else{
exgcd(b,a%b,d,x,y);
int temp=x;
x=y;
y=temp-(a/b)*y;
}
}
void initi(int r){
M=1;
int i,Mi,x,y,d;
for(i=1;i<=r;i++)
M*=m[i];
for(i=1;i<=r;i++){
Mi=M/m[i];
exgcd(Mi,m[i],d,x,y);
gcd[i]=Mi*x;
}
}
int china(int r){
int ans=0,i;
for(i=1;i<=r;i++){
ans=(ans+gcd[i]*a[i])%M;
}
if(ans<0)
ans+=M;
return ans;
}
int main()
{
int p,e,i,d,temp,ans;
initi(3);
while(scanf("%d%d%d%d",&p,&e,&i,&d)!=EOF){
if(p==-1&&e==-1&&i==-1&&d==-1)
break;
a[1]=p,a[2]=e,a[3]=i;
ans=china(3);
while(ans<=d)
ans+=M;
printf("%d\n",ans-d);
}
}