24小时热门版块排行榜    

查看: 2341  |  回复: 9
本帖产生 4 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

holmescn

金虫 (正式写手)

[交流] Euler 工程 第14题:找最长的数列 已有6人参与

周末了,放个题出来玩玩:

定义一个正整数数列,其迭代公式为:
n = n/2 (当n为偶数)
n = 3n+1 (当n为奇数)

比如从n=13开始,计算这个数列得:
13 ->40->20->10->5->16->8->4->1
这个数列一共有10项。
这个数列是不是总收敛到1还是个没有解决的问题(称为Collatz Problem)
不过,我们并不是要解这个难题,而是要求在小于1百万的所有起始数中,哪个数能产生最长的数列。

这里要注意的是,数列中间的项是可以大于1百万的,要看提最后数列终止到1时候的长度。

PS:这东西不能用归纳法证出来吗?
PS2:注意1分钟原则啊。不过,大于1分钟的程序也可以发上来,这样才有的交流。

Here we go!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
jjdg(金币+2): 辛苦了 2011-05-21 00:51:59
微尘、梦想(程序强帖+1): 2011-05-21 19:19:39
matlab的,13s多哦
CODE:
%% Which starting number, under one million, produces the longest chain?
%   n = n/2 (even); n = 3*n+1 (odd) till n==1
% like starting from 13, we generate the following sequence (contains 10 terms)
%  13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

function result = euler14()
tic;
n = 0;
len = 0;
big = 0;
result = 0;
for i=1:1e6
    n = i;
    len = 0;
    while n~=1
        if mod(n,2)==0
            n = n/2;
        else
            n = n*3+1;
        end
        len = len+1;
    end
    len = len+1; % n==1
   
    if len>big
        big = len;
        result = i;
    end
end
toc;
end

结果
CODE:
% Elapsed time is 13.644453 seconds.
% ans =
%       837799

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
6楼2011-05-20 21:23:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见