poj 1006 Biorhythms 中国剩余定理

原创 2014年02月22日 23:34:01
这道题真是花费n多时间啊,关键我就是想知道事情的来龙去脉.
"中国剩余定理"的经典例子:
《孙子算经》中有“物不知数”问题:“今有物不知其数,三三数之余二 ,五五数之余三 ,七七数之余二,问物几何?”答为“23”。

 --------这个就是传说中的“中国剩余定理”。 其实题目的意思就是,n % 3 = 2, n % 5 = 3, n % 7 = 2; 问n是多少?

那么他是怎么解决的呢?
看下面:
题目中所涉及的3,5,7三个互质的数,(补充:)
(一个数的多少倍除以另一个数所得的余数为0,应该在互为素数里面吧)
(a%b=c-->(a+bk)%b=c)
(a%b=c-->(a*k)%bb=kc)
令:5*7*a%3=1;---------->a=2;即5*7*2=70;
   3*7*b%5=1;---------->b=1;即3*7*1=21;
   3*5*c%b=1;---------->c=1;即3*5*1=15;

为什么要使余数为1?是为了要求余数2的话,只要乘以2就可以了.要求余数为3的话,只要乘以3就可以了
(因为题目是在求n%3=2;n%5=3;n%7=2;)
(5*7*2)*2可以被5和7整除,但是%3等于2;
(3*7*1)*3可以被3和7整除,但是%5等于3;
(3*5*1)*2可以被3和5整除,但是%7等于2;
那么即使相加后,%3,5,7的情况也是一样的
那么我们即可得到(5*7*2)*2+(3*7*1)*3+(3*5*1)*2=233;
然后233%(3*5*7)=23;
----------------------------
回到题目中,我们要求那个num,开始的天数为d,依据题意是这样子:
(num+d)%23=p;
(num+d)%28=e;
(num+d)%33=i;令num+d=total;则所求即为num=total-d;
我终于知道怎么求的了.
在23,28,33三个数字是互质的
我们M=23*28*33=21252;M1=21252/23=924;M2=21252/28=759;M3=21252/33=644;
先确定第一个:924*y1=1(mod 23)<==>(924 mod 23)y1(mod 23)<==>4*y1=1(mod)23==>y1=6;
33*28*6=5544;
(除最后一个等号外其余等号是同余的意思,这条性质从哪得到的?)依次类推,只不过推导较麻烦,这到题也就是从这里失去了意义.
759*y2=1(mod 28)<==>3*y2=1(mod 28)==>y2=19;
23*33*19=14421;
644*y3=1(mod 33)<==>17*y3=1(mod 33)==>y3=2;
23*28*2=1288
;
那么total=5544*p+14421*e+1288*i;
注意范围限制:total%=21252,如果<=0;total+=21252;真漂亮!
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
//	freopen("1006.txt","r",stdin);
	int p,e,i,d,total,kcase=0;//题目中的含义
	while(1)
	{
		scanf("%d%d%d%d",&p,&e,&i,&d);
		if(p==-1 && e==-1 && i==-1 &&d==-1 )
			break;
		total=5544*p+14421*e+1288*i;
		kcase++;
		total%=21252;
		if(total-d<=0)
			total+=21252;
		printf("Case %d: the next triple peak occurs in %d days.\n",kcase,total-d);
	}
	return 0;
}

相关文章推荐

【中国剩余定理】POJ Biorhythms 1006

Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 122174 Accepted: 385...
  • ydd97
  • ydd97
  • 2015年09月16日 01:20
  • 335

POJ 1006 Biorhythms(中国剩余定理 模板)

POJ 1006 Biorhythms(中国剩余定理 模板)

Biorhythms POJ - 1006 (中国剩余定理)

Some people believe that there are three cycles in a person’s life that start the day he or she is b...

poj1006 Biorhythms(中国剩余定理)

http://poj.org/problem?id=1006 题意:给你三个属性顶峰的开始日期,今天的日期,以及三个周期大小,求下一次三个顶峰均出现时的最早时间。 思路:首先ym下这位...

POJ 1006 Biorhythms(中国剩余定理)

中国剩余定理 欧几里得 扩展欧几里得 数论 poj106 Description Some people believe that there are three cycles in a person...

POJ 1006 Biorhythms(中国剩余定理 )

题目链接:click here~~ 【题目大意】:  人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方...

POJ1006 Biorhythms(生理周期,中国剩余定理详述)

Description   人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的...

20140714 「初等数论 - 中国剩余定理」 POJ 1006 Biorhythms

数论:拓展欧几里得 + 同余模方程模板一份。 题解嘛,有空再补。。。(其实就是模板题。) #include #include using namespace std; type...

POJ 1006---Biorhythms【中国剩余定理】

Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 78980   Ac...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 1006 Biorhythms 中国剩余定理
举报原因:
原因补充:

(最多只允许输入30个字)