module Main where primes = 2 : [i | i <- [3..], and [rem i p > 0 | p <- takeWhile (\p -> p^2 <= i) primes]] primeFactors n = filter (\a -> mod n a == 0) (takeWhile (\m -> m * m < n) primes) main = do print (last (primeFactors 600851475143))