Biorhythms(中国剩余定理的应用)
2014-04-12 14:06
246 查看
题目大意:
人的激素,情感,和智商分别由三个不同的周期,在周期的最后一天达到顶峰,三个周期分别是23,28,33.
现在给你三个周期上一次达到顶峰的时间批p,e,i,和当前的时间d要你求还有多少天后三个周期同时达到顶峰;
解题思路:
假设还有x天;
则:(x+d)%p=23、(x+d)%e=28、(x+d)%i=33;一看这部就是中国剩余定理了吗;
so!!!!上个代码,不知都神马是中国剩余定理的先看我的上一篇中国剩余定理
人的激素,情感,和智商分别由三个不同的周期,在周期的最后一天达到顶峰,三个周期分别是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); } }
相关文章推荐
- poj 1006 Biorhythms(中国剩余定理的应用)
- hdu 1370 Biorhythms 中国剩余定理的应用 and 枚举方法
- 【poj1006-biorhythms】中国剩余定理
- poj 1006 Biorhythms 中国剩余定理
- 【poj 1006】Biorhythms 中国剩余定理
- 中国剩余定理 POJ 1006 Biorhythms
- HDU 1370 Biorhythms(中国剩余定理 + 拓展欧几里得)
- SDUT ACM 1002 Biorhythms 中国剩余定理
- 中国剩余定理简介、算例及其应用
- POJ 1006 Biorhythms 中国剩余定理
- hdu 1573 X问题 非互素的中国剩余定理应用
- Biorhythms(poj1006+中国剩余定理)
- Biorhythms(poj1006+中国剩余定理)
- POJ_Biorhythms_递归_中国剩余定理求解
- POJ1006 UVA756 UVALive5421 Biorhythms【中国剩余定理】
- hdu_1370Biorhythms(互素的中国剩余定理)
- hdu 1573 X问题 非互素的中国剩余定理应用
- POJ 1006 Biorhythms [中国剩余定理] 超短代码
- 扩展欧几里得、求乘法逆元及其应用、中国剩余定理(互质版和非互质版)、欧拉函数、快速判素数模板
- Biorhythms(求模线性方程组--中国剩余定理的完美诠释)