morris555's diary

高校生のブログです。

Problem 14

Problem 14はいわゆる「コラッツの問題」ってやつです。

import Data.List (maximumBy)
import Data.Ord (comparing)

collatz 1 a = a
collatz n a
  | even n = collatz (n `div` 2) (a + 1)
  | otherwise = collatz (3*n + 1) (a + 1)

main = print $ maximumBy (comparing snd) [(x, collatz x 1) | x <- [2 .. 1000000]]

こんな感じですか。