hdu 1370(中国剩余定理)

来源:互联网 发布:mac os 10.13发布时间 编辑:程序博客网 时间:2024/04/29 05:06

点击打开链接


题意:

人有三个循环,循环周期分别为23,28,33,给你这三个周期出现的时间a,b,c,以及开始计算的天数d。求三个周期在同一天的时间。。。


a=(n-d)%23;

b=(n-d)%28

c=(n-d)%33;

23  28   33互质可以用中国剩余定理

ps:自己犯了一个小错误,debug好长时间。。


#include"stdio.h"#include"string.h"#define N 4int A[N],R[N],k;void exgcd(int a,int b,int &x,int &y){if(b==0){x=1;y=0;}else{exgcd(b,a%b,x,y);int t=x;x=y;y=t-(a/b)*y;}}int china_reminder(int a[],int r[],int k){int i;int x,y;int n,m;int ans;ans=0;n=1;for(i=0;i<k;i++)n*=a[i];for(i=0;i<k;i++){m=n/a[i];exgcd(m,a[i],x,y);ans=(ans+m*x*r[i]+n)%n;//不要写成ans+=..}if(ans<=0)ans+=n;return ans;}int main(){int ans;int d;int t=1;int a,b,c;scanf("%d",&a);while(scanf("%d%d%d%d",&a,&b,&c,&d)!=-1){if(a==-1&&b==-1&&c==-1&&d==-1)break;k=3;a%=23;b%=28;c%=33;A[0]=23;R[0]=a;A[1]=28;R[1]=b;A[2]=33;R[2]=c;ans=china_reminder(A,R,k);ans-=d;if(ans<=0)ans+=23*28*33;printf("Case %d: the next triple peak occurs in %d days.\n",t++,ans);}return 0;}


原创粉丝点击