きったんの頭

Problem 3

f :: Integer -> [Integer]
f a = factorize a (2:[3,5..])
    where factorize n (x:xs) | n < x * x    = [n]
                             | mod n x == 0 = x:factorize (div n x) (x:xs)
                             | otherwise    = factorize n xs

pe3 :: Integer -> Integer
pe3 a = maximum(f a)

main :: IO()
main = print $ pe3 600851475143