Project Euler 94

http://projecteuler.net/index.php?section=problems&id=94


Pell方程式に帰着される。

pells m n = (next m n):[ next p q | (p, q) <- pells m n ] where
                            next m n = (m * 2 + n * 3, m + n * 2)
limit = 10^9
main = print (sum (takeWhile (<= limit) [ 4 * m^2 | (m,_) <- pells 1 0 ])
            + sum (takeWhile (<= limit) [ 2 * m^2 | (m,_) <- pells 1 1 ]))