主题:韩信点兵(中国剩余定理)
163111511
[专家分:90] 发布于 2005-08-05 17:46:00
韩信点兵又称为中国剩余定理,相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余1人、5人一列余2人、7人一列余4人、13人一列余6人。刘邦茫然而不知其数。问最少多少兵士?
回复列表 (共34个回复)
沙发
zqnhlm [专家分:780] 发布于 2005-08-05 18:56:00
我晕一下子发这么多题目
板凳
moz [专家分:37620] 发布于 2005-08-05 23:51:00
1. 5余2,说明尾数为2或7
2. 3余1,说明前面几位数的和......
3. 唉,用数学我还是想不到有什么好的办法去解了,
只好用QB的do或者for来计算了,唉,数学书到用时方恨少.
最简单的当然是逐一加四个IF来计算了,不过效率也太低了
QB程序:
以13+6为起始值 (13的条件)
考虑3的余数因素以 (最大的值13的3倍=39) 为增量 (3和13的条件)
考虑到尾数需要为2或7,(5的条件)
加增量39直到尾数为7或2 的 97 作为新的起始值
尾数要在2和7之间变化,增量是39的,只好把5的值也乘进来,(具体道理自己慢慢研究)
增量改成3*13*5=195
把7的条件作为判断的条件就可以了,
那么这个程序的速度就可以大大提高了
最后算到这个数最少是487,不知道对不对,止不止那么少?
(多多益善,少少无拘 也不至于少到这个程度吧?)
3 楼
jyf1987 [专家分:930] 发布于 2005-08-10 09:44:00
这种题目应该不是编程问题
是数奥问题
4 楼
moz [专家分:37620] 发布于 2005-08-10 12:38:00
for i=97 to 100000 step 195
if i mod 7=4 then print i;
next
5 楼
LSQ [专家分:220] 发布于 2005-08-10 18:18:00
先分别求出能被3、5和7整除而被13除余1的数(是105),能被3、5和13整除而被7除余1的数(是546),能被3、7和13整除而被5除余1的数(是1911),能被5、7和11整除而被1除余1的数(是910)。
然后用原题中被3、5、7、13除所得的余数(1、2、4、6)分别去乘105、546、1911、910,再把所得的积相加,也就是105*1+546*2+1911*4+910*6=13391
13391大于3、5、7、13的最小公倍数+1(1365+1),则最后从13391中减去3、5、7、13的最小公倍数(1365)的若干倍(这里是9倍),13391-1365*9得1106,这就是适合条件的最小数
[fly]我说的没错吧![/fly]
6 楼
moz [专家分:37620] 发布于 2005-08-11 01:19:00
哦?
那你能不能告诉我 487 这个数有什么问题吗?
7 楼
staa [专家分:3690] 发布于 2005-08-11 18:30:00
咱老实点:
i=19
do
if i-4 mod 7 =0 then if i-2 mod 5 =0 then if i-1 mod 3 =0 then print i : end
i=i+13
loop
怎么会无解啊???
8 楼
编程黑客 [专家分:1660] 发布于 2005-08-11 22:32:00
cls
x=1
do
if x mod 3=1 and x mod 5=2 and x mod 7=4 and x mod 13=6 then print x:end
loop
end[em3]
9 楼
moz [专家分:37620] 发布于 2005-08-13 16:18:00
TO:STAA
mod 的运算优先级比减号高
100 - 4 mod 7 = 96
老实点就要老实的样子嘛:
for i=1 to 1000000
if i mod 13=6 and i mod 7 =4 and i mod 5 =2 and i mod 3 =1 then print i;
next
或者
for i=6 to 1000000 step 13
if i mod 7 =4 and i mod 5 =2 and i mod 3 =1 then print i;
next
10 楼
staa [专家分:3690] 发布于 2005-08-14 14:38:00
i=19
do
if (i-4) mod 7 =0 then if (i-2) mod 5 =0 then if (i-1) mod 3 =0 then print i : end
i=i+13
loop
这样总可以了吧 呵呵
我来回复