ACM(034)韩信点兵(1)
来源:互联网 发布:网易蜂巢注册域名 编辑:程序博客网 时间:2024/05/29 04:19
韩信点兵
时间限制:3000 ms | 内存限制:65535 KB
难度:1
- 描述
- 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100 。
- 输入
- 输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7)。例如,输入:2 4 5
- 输出
- 输出总人数的最小值(或报告无解,即输出No answer)。实例,输出:89
- 样例输入
2 1 6
- 样例输出
41
- 来源
- 经典算法
- 上传者
- 首席执行官
(1)简单方法
#include <iostream>using namespace std;int main(){int count;int a,b,c;cin>>a>>b>>c; for(count=10;count<100;count++)if(count%3==a&&count%5==b&&count%7==c){cout<<count;cout<<endl;return 0;}cout<<endl<<"No answer !"<<endl;return 0;}
(2)使用中国剩余定理
#include <iostream>using namespace std;int main(){int count;int a,b,c;cin>>a>>b>>c; count=(a*70+b*21+c*15)%105;if(n>100||n<10) cout<<"No answer"<<endl;else cout<<n<<endl;}
附录:中国剩余定理定义与解释(百度百科)1定义
中国剩余定理的结论:令任意固定整数为M,当M/A余a,M/B余b,M/C余c,M/D余d,…,M/Z余z时,这里的A,B,C,D,…,Z为除数,除数为任意自然数([span]如果为0,没有任何意义,如果为1,在孙子定理中没有计算和探讨的价值,所以,不包括0和1)时;余数a,b,c,d,z为自然整数时。1、当命题正确时,在这些除数的最小公倍数内有解,有唯一的解,每一个最小公倍数内都有唯一的解;当命题错误时,在整个自然数范围内都无解。2、当M在两个或两个以上的除数的最小公倍数内时,这两个或两个以上的除数和余数可以定位M在最小公倍数内的具体位置,也就是M的大小。3、正确的命题,指没有矛盾的命题:分别除以A,B,C,D,…,Z不同的余数组合个数=A,B,C,D,…,Z的最小公倍数=不同的余数组合的循环周期.2解释
注释:三数为a b c,余数分别为 m1 m2 m3,%为求余计算,&&是“且”运算⒈分别找出能被两个数整除,而满足被第三个整除余一的最小的数。k1%b==k1%c==0 && k1%a==1;k2%a==k2%c==0 && k2%b==1;k3%a==k3%b==0 && k3%c==1;⒉将三个数(能被两个数整除、除以第三个数余1)乘对应数字的余数再加起来,减去这三个数的最小公倍数即得结果。Answer = k1×m1 + k2×m2 + k3×m3 - P×(a×b×c);P为满足Answer > 0的最大整数;或者 Answer = (k1×m1 + k2×m2 + k3×m3)%(a×b×c) ;解题思路:令某数为M,令素数为A,B,C,D,…,Z,已知M/A余a,M/B余b,M/C余c,M/D余d,…,M/Z余z。求M=?因为A,B,C,D,…,Z为不同的素数,故,B*C*D*…*Z不可能被A整除,有等差数列(B*C*D*…*Z)+(B*C*D*…*Z)N中取A个连续项,这A个连续项分别除以A的余数必然存在0,1,2,3,…,A-1,所以,从这A个连续项中能寻找到除以A余1的数。再用除以A余1的这个数*a其积必然除以A余a,这个除以A余a的数,为能够被素数B*C*D*…*Z整除的数,为第一个数;再按同样的道理,从A*C*D*…*Z的倍数中寻找除以B余b的数,该数具备被素数A,C,D,…,Z整除的特性,为第二个数;因为,第一个数除以A余a,第二个数能被素数A,C,D,…,Z整除,即能被A整除,所以,第一个数+第二个数之和,仍然保持除以A余a;同理,第二个数除以B余b,因第一个数能被B整除,所以,第二个数+第一个数之和,仍然保持除以B余b。即,第一个数+第二个数之和,为满足除以A余a,除以B余b。依此类推,按上面的方法寻找到除以各素因子的余数的数之总和,为满足除以各素因子余数的条件的数。总和再减去能被这几个素数共同整除的数(A*B*C*D*…*Z)N后,其差仍然保持除以各素因子余数的条件的数。由此构成孙子定理的解法。
0 0
- ACM(034)韩信点兵(1)
- ACM复习(1)1077 韩信点兵
- 韩信点兵(南洋理工ACM)
- ACM-韩信点兵
- 韩信点兵 ----ACM
- ACM--韩信点兵(java)
- ACM:蓝桥杯:韩信点兵
- ACM-韩信点兵Java
- NYOJ-ACM-韩信点兵
- C语言 南阳理工ACM 34.韩信点兵
- ACM-韩信点兵【中国剩余定理-孙子定理】
- 韩信点兵 南阳理工ACM 题目34
- 13-韩信点兵(算法)
- 韩信点兵(剩余定理)
- 韩信点兵(水题)
- 韩信点兵(hanxin)
- //韩信点兵
- 韩信点兵
- 要开始写博客吗
- 多态
- erwteyrhfghfghgh
- mysql:21个性能优化最佳实践之1[为查询缓存优化你的查询]
- app应用内支付定支付集成转载一
- ACM(034)韩信点兵(1)
- Ubuntu下搭建MIPS交叉编译环境
- 转发 2013豆瓣电影【口碑榜】Top100
- EasyHR人力资源管理系统V5.1发布了
- 突破游戏驱动级反外挂保护
- Qt中编译mysql驱动程序及解决 driver not loaded 错误
- 谈谈信息熵--信息的度量
- Jquery+php+mysql建立省市级三级联动【很简单的构思】
- 搞定QQ游戏系列驱动保护TesSafe.sys