码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1006 Biorhythms

时间:2018-02-25 20:33:35      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:出差   [1]   span   gpo   return   stream   clu   pre   inux   

题解:中国剩余定理

通解:ans=a[i]*M[i]*Inv(M[i],m[i])+k*M

注意window与linux下读入输出差异

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long Lint;

int T;
Lint b;
Lint m[4]={0,23,28,33};
Lint a[4];
Lint M;
Lint ans;

Lint Gcd(Lint a,Lint b){
	if(b==0)return a;
	return Gcd(b,a%b);
}
Lint Inv(Lint x,Lint p){
	int k=0;
	for(int i=1;i<=p;++i)if(Gcd(i,p)==1)++k;
	Lint ret=1;
	k--;
	for(;k;k>>=1,x=x*x%p){
		if(k&1)ret=ret*x%p;
	}
	return ret;
}

int main(){
	M=m[1]*m[2]*m[3];
	while(scanf("%lld%lld%lld%lld",&a[1],&a[2],&a[3],&b)){
		++T;
		if(a[1]==-1)return 0;
		ans=0;
		for(int i=1;i<=3;++i){
			ans=(ans+a[i]*(M/m[i])*Inv(M/m[i],m[i]))%M;
		}
		ans=(ans-b+M)%M;
		if(ans==0)ans=M;
		printf("Case %d: the next triple peak occurs in %lld days.\n",T,ans);
	}
}

  

POJ 1006 Biorhythms

标签:出差   [1]   span   gpo   return   stream   clu   pre   inux   

原文地址:https://www.cnblogs.com/zzyer/p/8470186.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!