Problem 12
http://projecteuler.net/index.php?section=problems&id=12
三角数 (n_1 = 1, n_ 2 = 1 + 2, n_i = 1 + ... + i) の中で、500以上
の因数を持つ最小の数は?
import List import Prime main = print $ head $ filter ((>= 500) . numOfFactors) triangleNumbers numOfFactors = product . (map ((+1) . length)) . group . integerFactorization integerFactorization n = f n $ takeWhile (\i -> i <= (floor . sqrt . fromIntegral) n) primes where f 1 _ = [] f i [] = [i] f i ps@(p:ps') | i `mod` p == 0 = p : f (i `div` p) ps | otherwise = f i ps' triangleNumbers = scanl1 (+) [1..]