PEをMathematicaで

Project Eulerに挑戦してみよう

Project Euler 14 / 最長のコラッツ数列

正の整数に以下の式で繰り返し生成する数列を定義する。

  • n → n/2 (n が偶数)
  • n → 3n+1 (n が奇数)

13からはじめると,この数列は以下のようになる。

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

13から1まで10個の項になる。この数列はどのような数字からはじめても最終的には1になると考えられているが,まだそのことは証明されていない(コラッツ問題)。

100万未満の数字の中でどの数字からはじめれば最長の数列を生成するか?

Problem 14 - Project Euler


組み込み関数の NestWhileList[f, expr, test] を使えば簡単かと。これは「expr で開始し,結果に test を適用してもTrueでなくなるまで f を反復適用した結果のリストを生成する」という命令です。13の場合で実験してみました。


この関数で1になるまでのリストを作って Length[ ] でその長さを取得。最大値を探せば出来上がりです。