Problem 12
Problem 12は500個以上の約数を持つ最小の三角数を求める問題です。
import Data.List (group) factorize 1 = [(1, 0)] factorize n = format . factorize' n $ 2:3:[x + y | x <- [6, 12 ..], y <- [-1, 1]] where factorize' n xs'@(x : xs) | n < x * x = [n] | rem n x == 0 = x : factorize' (div n x) xs' | otherwise = factorize' n xs format xss = [(head xs, length xs) | xs <- group xss] numOfDivs n = product [b + 1 | (_, b) <- factorize n] triNums = tri 1 2 1 where tri v add d = v : tri (v + add) (add + d) d main = print . head . dropWhile ((<= 500) . numOfDivs) $ triNums
今回も遅いです。
上手な書き方ができません。
まだまだ勉強不足ですね。