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..]