最长考拉兹序列
作者:Felix Herrmann
https://projecteuler.net/problem=14
对于正整数集,定义以下迭代序列
n → n/2(n 为偶数) n → 3n + 1(n 为奇数)
使用上述规则并从 13 开始,我们生成以下序列:13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
可以看出,这个序列(从 13 开始到 1 结束)包含 10 个项。虽然尚未得到证明(考拉兹猜想),但人们认为所有起始数字最终都会到 1。
在一百万以下,哪个起始数字会产生最长的链?
注意:一旦链开始,这些项允许超过一百万。
源代码: prob014-felher.pl
use v6; # this program takes quite a few minutes on my machine my Int multi sub collatz(Int $n where * %% 2) { $n div 2; } my Int multi sub collatz(Int $n ) { 3 * $n + 1; } my Int sub get-length(Int $n) { state Int %length{Int} = 1 => 1; my $result = %length{$n} // 1 + get-length collatz $n; %length{$n} = $result; $result; } my $max = 0; my $start = 0; for 1 ..^ 1_000_000 -> $n { say "Starting number: $n" unless $n % 10000; #just for progress my $length = get-length $n; if $length > $max { $start = $n; $max = $length; } } say "The starting number $start produces a sequence of length $max";