p3 :: Integer p3 = maximum $ factors 600851475143 [] where factors :: Integer -> [Integer] -> [Integer] factors 1 l = l factors n l = factors (div n divisor) (divisor:l) where divisor = head $ filter (\x -> mod n x == 0) [2..] main = putStrLn $ "Solution: " ++ show p3