poj 1006
来源:互联网 发布:软件著作权和专利 编辑:程序博客网 时间:2024/06/05 15:52
木棍:
这道题明显是中国剩余定理得应用。设要求的数是x,(x+d)%23==p,(x+d)%28==e,(x+d)%33==i;
中国剩余定理:
<p>《孙子算经》中有“物不知数”问题:“今有物不知其数,三三数之余二 ,五五数之余三 ,七七数之余二,问物几何?”答为“23”。</p><p> --------这个就是传说中的“中国剩余定理”。 其实题目的意思就是,n % 3 = 2, n % 5 = 3, n % 7 = 2; 问n是多少?</p><p>那么他是怎么解决的呢?</p><p>看下面:</p><p>题目中涉及 3, 5,7三个互质的数、</p><p>令:5 * 7 * a % 3 = 1; --------------> a = 2; 即5 * 7 * 2 = 70;</p><p> 3 * 7 * b % 5 = 1; --------------> b = 1; 即3 * 7 * 1 = 21;</p><p> 3 * 5 * c % 7 = 1; --------------> c = 1; 即3 * 5 * 1 = 15;</p><p>为什么要使余数为1:是为了要求余数2的话,只要乘以2就可以,要求余数为3的话,只要乘以3就可以!</p><p>( 因为题目想要n % 3 =2, n % 5 = 3, n % 7 =2; )</p><p>那么:要使得n % 3 = 2,那么( 5 * 7 * 2 )*2 % 3 = 2;( 因为5 * 7 * 2 % 3 = 1 )</p><p>同理: 要使得n % 5 = 3,那么( 3 * 7 * 1 )*3 % 5 = 3;( 因为3 * 7 * 1 % 5 = 1 )</p><p>同理:要使得n % 7 = 2,那么( 3 * 5 * 1 )* 2 % 7 = 2;( 因为3 * 5 * 1 % 7 = 1 )</p><p>那么现在将( 5 * 7 * 2 )* 2和( 3 * 7 * 1 )* 3和( 3 * 5 * 1 )* 2相加会怎么样呢?我们知道</p><p>( 5 * 7 * 2 )* 2可以被5和7整除,但是%3等于2</p><p>( 3 * 7 * 1 )* 3可以被3和7整除,但是%5等于3</p><p>( 3 * 5 * 1 )* 2可以被3和5整除,但是%7等于2</p><p>那么即使相加后,%3, 5, 7的情况也还是一样的!</p><p>那么就得到一个我们暂时需要的数( 5 * 7 * 2 )* 2 +( 3 * 7 * 1 )* 3 +( 3 * 5 * 1 )* 2 = 233</p><p>但不是最小的!所有我们还要 233 % ( 3 * 5 * 7 ) == 23 得解!</p><p> </p>
应用中国剩余定理可以解决:
代码:
#include<stdio.h>int main(){int p,e,i,d,x,j=0;while(scanf("%d%d%d%d",&p,&e,&i,&d)){ if(~p&&~e&&~i&&~d){ x=(1288*i+14421*e+5544*p)%21252; if(x<=0) x+=21252; printf("Case %d: the next triple peak occurs in %d days.\n",++j,x-d);}break;}}
0 0
- POJ[1006]
- POJ 1006
- poj 1006
- poj 1006
- poj 1006
- POJ 1006
- poj 1006
- poj 1006
- POJ-1006
- poj 1006
- POJ 1006
- poj 1006
- POJ 1006
- POJ-1006
- POJ 1006
- POJ 1006
- poj--1006
- POJ 1006
- Let the Balloon Rise(STL的map)
- ASPxNavBar显示不同页
- POJ 2406 Power Strings 简单KMP
- hdu1175: 连连看
- 嵌入式 linux中dd命令[用于制作U盘启动盘的神奇的命令]
- poj 1006
- 今天开通CSDN博客,写写感想和计划
- Struts2返回JSON数据的具体应用范例
- QSortFilterProxyModel过滤QTreeView中的文件
- javascript函数也是一个对象
- 基于axis2的基本java对象webservice发布
- 黑客与画家 书评
- 模板(template)中typename的使用方法
- ExtJs--01--引入ExtJs4.1.1