NYOJ34韩信点兵

来源:互联网 发布:丰城市网络问政网 编辑:程序博客网 时间:2024/04/28 21:30

中国剩余定理:中国剩余定理,又称为中国余数定理、孙子剩余定理,古有“韩信点兵”、“孙子定理”、“鬼谷算”、“隔墙算”、“剪管术”、“秦王暗点兵”、“物不知数”之名,是数论中的一个重要命题。

在中国古代著名数学著作《孙子算经》中,有一道题目叫做“物不知数”,原文如下:
有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
即,一个整数除以三余二,除以五余三,除以七余二,求这个整数。中国数学家秦九韶于1247年做出了完整的解答,口诀如下:
三人同行七十希,五树梅花廿一支,七子团圆正半月,除百零五使得知
这个解法实际上是,首先利用秦九韶发明的大衍求一术求出5和7的最小公倍数35的倍数中除以3余数为1的最小一个70(这个称为35相对于3的数论倒数),3和7的最小公倍数21相对于5的数论倒数21,3和5的最小公倍数15相对于7的数论倒数15。然后70X2+21X3+15X2=233
233便是可能的解之一。它加减3、5、7的最小公倍数105的若干倍仍然是解,因此最小的解为233除以105的余数23。
附注:这个解法并非最简,因为实际上35就符合除3余2的特性,所以最小解是:35X1+21X3+15X2-3X5X7=128-105=23 最小解加上105的正整数倍都是解
物不知数”的解法实际上给出了求解一般同余方程组的方法。设m1,m2,…,mi为两两互质的正整数,a1,a2,…,ak为任意整数,则同余方程组
x≡a1(mod m1);
x≡a2(mod m2);
……
x≡ai(mod mi);
总有整数解,并且它的全部解可模仿上述方法得到。
题目 :

韩信点兵

时间限制: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
#include <iostream>using namespace std;int main(){    int a,b,c;    while(cin>>a>>b>>c)    {        int s=a*70+b*21+15*c;        s%=105;        if(s>100||s<10)            cout<<"No answer"<<endl;        else            cout<<s<<endl;    }    return 0;}


0 0