回 帖 发 新 帖 刷新版面

主题:韩信点兵(中国剩余定理)

韩信点兵又称为中国剩余定理,相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余1人、5人一列余2人、7人一列余4人、13人一列余6人。刘邦茫然而不知其数。问最少多少兵士?

回复列表 (共34个回复)

沙发

我晕一下子发这么多题目

板凳

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 楼

这种题目应该不是编程问题
是数奥问题

4 楼

for i=97 to 100000 step 195
    if i mod 7=4 then print i;
next

5 楼

    先分别求出能被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 楼

哦?
那你能不能告诉我 487 这个数有什么问题吗?

7 楼

咱老实点:
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 楼

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 楼

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 楼

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

这样总可以了吧 呵呵

我来回复

您尚未登录,请登录后再回复。点此登录或注册