AppsBoss· Jimmy相册· 百科. RSS

三人同行七十稀

Tuesday October 24, 2006 by Jimmy.Lin

前阵子解答Frank的质数问题 。今晚突然想起了一个有意思的问题。

给你一个105之内的数,把除以3,5,7的余数告诉我,我可以算出这个是什么数

这个问题在我很小的时候,我伯父教过我的一首歌曲:
三人同行七十稀,
五树梅花廿一枝,
七子共党中秋月,
除百零五便得知。

几年过去了。还深深的印在在脑中。特别是那个廿一枝,当时我伯父还问我这个字怎么念来着。 我的一个兄弟不认识,我认识,那时候狂喜。今天到网上一找,发现跟网络版本有点差别,古人【明朝数学家程大位在他著的《算法统宗》(1593年)】是如下说法,不过差不多的拉,我伯父的版本似乎更顺口:
三人同行七十稀,
五树梅花廿一枝,
七子团圆月正半,
除百零五便得知。

我来解说一下我伯父的版本好了。
除数是3时,乘以70,
除数是5时,乘以21,
除数时7时,乘以15,
然后除以105,余数就是答案。

本质问题分析:
70是5与7的倍数,而用3除余1;
21是3与7的倍数,而用5除余1;
15是3与5的倍数,而用7除余1。

实际例子分析:
如果一个数除以3余1,除以5余4,除以7余5。
求这个最小数。

我们如果不用公式,按照正常的逻辑来解。
除以3余1,则数为3m +1(m为自然数)
除以5余4,把m的值代入
m = 1 时,值4,正解
那么,能被3,5除的肯定有如下特征:
4 + 3*5*p

现在我们要一个数除以7余5,设为7n + 5
所以7n + 5 = 4 + 15p
7n + 1 = 15p
很显然最小数当然是p= 1,次数为19。

如果用公式则是:
70 * 1 + 21 * 4 + 15 * 5 = 2 * 105 + 19
right ?

下面是信手抓来的plsql
??DECLARE v_num NUMBER;
BEGIN FOR i IN 1..105 LOOP IF mod(i,3)=1 AND MOD = 4 AND MOD = 6 THEN dbms_output.put_line(i); END IF; END LOOP;
EXCEPTION WHEN OTHERS THEN dbms_output.put_line(‘error’ || SQLCODE || SQLERRM);
END; ??

其实我们可以拓展到互质的三数。
希望大家喜欢。
好累啊。要睡觉了。^_^

Comments

启用垃圾过滤机制: 留言须2步: 预览 --> 送出

  Textile说明

个人介绍

jimmy lin,goodhawk
-->profile

广告服务:

杭州-窝里快购(推荐)
 免费申请.TK后缀的域名