45問目
http://projecteuler.net/index.php?section=problems&id=45
五角数でも六角数でもある三角数のうち40755の次の数を求める。
六角数は三角数に含まれるので、五角数でかつ六角数のものを求めれば十分だったようです。そんなこととは知らず、真面目に求めてしまいました。
main = print $ euler045 40755 euler045 :: Integer -> Integer euler045 n = head $ dropWhile (<= n) $ search tri pen hex search :: [Integer] -> [Integer] -> [Integer] -> [Integer] search (t : ts') ps hs | (t == head ps' && t == head hs') = t : (search ts' ps' hs') | otherwise = search ts' ps' hs' where ps' = dropWhile (< t) ps hs' = dropWhile (< t) hs tri :: [Integer] tri = [ div (n * (n + 1)) 2 | n <- [1..] ] pen :: [Integer] pen = [ div (n * (3 * n - 1)) 2 | n <- [1..] ] hex :: [Integer] hex = [ n * (2 * n - 1) | n <- [1..] ]