POJ 1006 Biorhythms

Posted ws_zzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1006 Biorhythms相关的知识,希望对你有一定的参考价值。

题解:中国剩余定理

通解: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的主要内容,如果未能解决你的问题,请参考以下文章

POJ 1006 Biorhythms 手算孙子定理

POJ1006Biorhythms——中国剩余定理

Biorhythms POJ - 1006

poj 1006 Biorhythms

POJ——T 1006 Biorhythms

poj1006-biorhythms中国剩余定理