acm中国剩余定理
来源:互联网 发布:怎么取消淘宝延迟收款 编辑:程序博客网 时间:2024/04/30 06:46
解题思路:
中国剩余定理,本题难点不在编程,而是分析题目并转化为数学公式
要引入本题解法,先来看一个故事 “韩信点兵”:
传说西汉大将韩信,由于比较年轻,开始他的部下对他不很佩服。有一次阅兵时,韩信要求士兵分三路纵队,结果末尾多2人,改成五路纵队,结果末尾多3人,再改成七路纵队,结果又余下2人,后来下级军官向他报告共有士兵2395人,韩信立即笑笑说不对(因2395除以3余数是1,不是2),由于已经知道士兵总人数在2300~2400之间,所以韩信根据23,128,233,------,每相邻两数的间隔是105(3、5、7的最小公倍数),便立即说出实际人数应是2333人(因2333=128+20χ105+105,它除以3余2,除以5余3,除以7余2)。这样使下级军官十分敬佩,这就是韩信点兵的故事。
韩信点兵问题简化:已知 n%3=2, n%5=3, n%7=2, 求n。
韩信用的就是“中国剩余定理”,《孙子算经》中早有计算方法,大家可以查阅相关资料。
“韩信点兵”问题计算如下:
因为n%3=2, n%5=3, n%7=2 且 3,5,7互质 (互质可以直接得到这三个数的最小公倍数)
令 n%3=x , n%5=y , n%7=z
使5×7×a被3除余1,有35×2=70,即a=2;
使3×7×b被5除余1,用21×1=21,即b=1;
使3×5×c被7除余1,用15×1=15,即c=1。
那么n =(70×x+21×y+15×z)%lcm(3,5,7) = 23 这是n的最小解
而韩信已知士兵人数在2300~2400之间,所以只需要n+i×lcm(3,5,7)就得到了2333,此时i=22
再看我们这道题,读入p,e,i,d 4个整数
已知(n+d)%23=p; (n+d)%28=e; (n+d)%33=i ,求n 。
同样,这道题的解法就是:
已知(n+d)%23=p; (n+d)%28=e; (n+d)%33=i
使33×28×a被23除余1,用33×28×8=5544;
使23×33×b被28除余1,用23×33×19=14421;
使23×28×c被33除余1,用23×28×2=1288。
因此有(5544×p+14421×e+1288×i)% lcm(23,28,33) =n+d
又23、28、33互质,即lcm(23,28,33)= 21252;
所以有n=(5544×p+14421×e+1288×i-d)%21252
本题所求的是最小整数解,避免n为负,因此最后结果为n= [n+21252]% 21252
那么最终求解n的表达式就是:
n=(5544*p+14421*e+1288*i-d+21252)%21252;
当问题被转化为一条数学式子时,你会发现它无比简单。。。。直接输出结果了。
#include<iostream>using namespace std;int main(void){int p,e,i,d;int time=1;while(cin>>p>>e>>i>>d){if(p==-1 && e==-1 && i==-1 && d==-1)break;int lcm=21252; // lcm(23,28,33)int n=(5544*p+14421*e+1288*i-d+21252)%21252;if(n==0)n=21252;cout<<"Case "<<time++<<": the next triple peak occurs in "<<n<<" days."<<endl;}return 0;}
- acm中国剩余定理
- ACM-韩信点兵【中国剩余定理-孙子定理】
- (ACM数论)中国剩余定理(孙子定理)
- 中国剩余定理模版【中国剩余定理】
- 中国剩余定理在ACM上的使用
- [2016ACM多校] HDU5768 容斥原理 中国剩余定理
- 杭电acm 1573X问题(中国剩余定理)
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 数论-中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 室内定位技术(三)——自有定位技术
- 其实,异常并不是那么难理解。——你不知道的异常(一)
- 类继承和类组合(内嵌类)初始化的不同
- 向上取整向下取整
- 对android软件进行系统升级
- acm中国剩余定理
- intel DPDK----一次颇为打击人的串讲
- C++标准库:智能指针auto_ptr
- 动态队列,链式队列 + 示意图
- Unix环境高级编程学习笔记(一) 初窥
- C++中模板的使用
- 除法优化
- git学习
- Eclipse快捷键大全(转载)