1.韩信的点兵是怎么算出来的?你知道公式吗?
相传韩信聪明绝顶,从来不直接统计自己军队的数量。他只是让士兵们三个一排、五个一排、七个一排地改变队形,他每次只扫一眼队列的末尾就知道总数了。输入三个非负整数a、b和c,表示每个队列末尾的人数(a
万向投入
输入三个非负整数a、b和c,表示每个队列末尾的人数(a
输出
输出总人数的最小值(或报无解,即输出Noanswer)。示例,输出:89
样本值输入
2 1 6
抽样输出
41
定理1如果A除以N得到的余数等于B除以N得到的余数,C除以N得到的余数等于D除以N得到的余数,那么ac除以N得到的余数等于B除以N得到的余数..
同余叙述是:
如a≡b(mod n),c≡d(mod n)
那么ac≡b d(mod n)
定理2用除数A除以除数B的倍数,余数R不变。也就是
如果a ≡ r(模b),那么a b n ≡ r(模b)
比如70≡1(mod 3)可以得到70 10× 3 ≡ 1 (mod 3)。
【韩信点兵法原理】
①能被5和7整除的总数是35k,其中k=2,即70被3整除是1,70a被3整除是a..
②能被3,7整除的总数是21k,其中k=1,即21除以5正好是1,21b除以5正好是b..
③能被3和5整除的总数是15k,其中k=1,即15除以7正好是1,15c除以7正好是c..
所以
根据①可以看出,70a+21b+15c除以3正好是a。
根据②,70a+21b+15c除以5,正好是B..
根据③可以看出,70a+21b+15c正好是C除以7的余数。
(70a+21b+15c)%(3*5*7)为最小值,然后判断最小值是否满足条件。
复制代码
1 #包含& lt标准视频
2
3 int main(){
4 int a;
5 int b;
6 int c;
7 int结果;
八
9 scanf(%d%d%d,& amp一,& ampb & amp;c);
10结果=(70 * a+21 * b+15 * c)%(3 * 5 * 7);
11
12 if(结果= 10 & amp& amp结果& lt=100)
13 printf(%d\,result);
14
其他15个
16 printf(无答案\);
17
18返回0;
19 }
其实,早在《孙子兵法》的计算中,就有类似的问题:
我不知道今天的事情有多少。事物的几何是什么?
“韩信点兵”的表述是:每三个士兵站成一排,然后多出来两个人;每五个士兵站成一排,多出来三个人;每七个士兵站成一排,多出来两个人。那么总共有多少士兵呢?
你可以发现这两个问题的相似之处。这是《韩信的士兵》题通常的题目结构,属于数学中初等数论的“解同余”题。
2.欧几里德的几何公式是什么?
欧几里德算法,也称为轮流除法,用于计算两个整数A和B的最大公约数..它的计算原理依赖于以下定理:定理:gcd(a,b) = gcd(b,a mod b)证明A可以表示为a = kb+r,那么r = a mod b设D是A和B的公约数,那么有d|a,d|b,r = a-kb,所以D |。a mod b)的公约数是d | b,d |r,但a = kb +r,所以d也是(a,b)的公约数。所以(a,b)和(b,a mod b)的公约数相同,它的最大公约数一定相等。事实证明。
发表评论