Life Goes On

まあまあだけど楽しんでる方です

57問目

http://projecteuler.net/index.php?section=problems&id=57
√2は以下のように連分数展開できる。
1 + 1/2 = 3/2 = 1.5
1 + 1/(2 + 1/2) = 7/5 = 1.4
1 + 1/(2 + 1/(2 + 1/2)) = 17/12 = 1.41666...
1 + 1/(2 + 1/(2 + 1/(2 + 1/2))) = 41/29 = 1.41379...
これを1000回繰り返したとき、分子の桁数が分母より大きいものはいくつあるか求める。
分子と分母の漸化式を求めて、数えました。

main = print $ euler057 1000

euler057 :: Int -> Int
euler057 m = length $ filter diff $ take m fracs
    where diff (n, d) = (length $ show n) > (length $ show d)

fracs :: [(Integer, Integer)]
fracs = iterate next (3, 2)
    where next (n, d) = (n + 2 * d, n + d)