出处:IT168 http://publish.it168.com/2008/0107/20080107043101.shtml
2008年1月发表于IT168
元旦节那天上午刚打开手机,就收到一美眉发来的短信,短信内容大致为“我把142857这六个数字化作快乐、幸福、幸运、美满、甜蜜、温馨。我再把你人生的各个阶段分为1-6,然后我把它们分别相乘,每个结果都是我的祝福。祝新年愉快!”。开始还没太在意,但后来想想为什么有那样的数字呢?难道隐藏着什么秘密?于是笔者打开电脑,好奇地在电脑上算了算:
142857×1=142857
142857×2=285714
142857×3=428571
142857×4=571428
142857×5=714285
142857×6=857142
看着上面的结果真是大吃一惊,真的挺有意思,于是又将短信转发给了一堆朋友,想想真是一组神奇的数字。哈哈,好奇的你是否跟我一样,也想知道还有哪些组也有类似的特性呢?是否想找出与别人不同的一组数字呢?下面跟我一起来研究下吧。
要找出第二组类似的数字,肯定不能凭空乱想,也不能蒙,必须靠程序计算。笔者熟悉写web程序,就在页面中研究了一下算法,验证了一下,最后发现一个很有意思的结果,从1到999999999999999之间共出现这样的数组竟然有10个!分别为142857, 1429857,14299857,142999857,1429999857,14299999857,142999999857,1429999999857,14299999999857,142999999999857。
细心的网友肯定发现了,新找出来的每组数字其实相当于在142三位的后面加了一个9,而且一组里面的每个数字一大一小相加都为9,如142857中,一大一小为:1+8=9,次大次小:2+7=9,再次:4+5=9!由于本人计算机计算能力有限,就不知道中间再加些9是不是还符合这样的规则了。
测试这段数据的算法如下(ASP程序实现):
检测一定范围内的数,如这个数分别与1、2、3、4、5、6相乘的结果位数与原数相同,并且结果中的每个数都能够在原数中找到,那就符合我们上面的原则。具体代码如下:(运行时间有点长)
<%
server.ScriptTimeout=3600 '控制IIS脚本运行时间,以秒为单位
for i=1 to 999999999999999 '循环测试数字
tt=0 '是否符合条件的控制开关
for j=1 to 6 '分别与六个数相乘
ij=i*j
if len(ij)<>len(i) then '如果长度不一致,设置开关并退出循环
tt=2
exit for
else
for k=1 to len(ij)
if(instr(i,mid(ij,k,1)))=0 then '判断每一个数字在原数中是否存在
tt=1
exit for
end if
next
if tt=1 then
exit for
end if
end if
next
if tt=0 then
response.write(i&"<br/>")
end if
next
%>
后记:后来翻阅资料考证,此组数字最早出现在埃及金字塔内,至于为何出现,至今都是个谜。当然这组数字的神奇还不仅仅只有这些,大家有兴趣可以看看这个地址:
http://softbbs.it168.com/thread-530670-1-1.html