-- 3 - largest prime factor
-- problem_3 :: Integer -> Integer
prims = fix (\f (x:xs) -> x:f (filter (\y -> rem y x /= 0) xs)) [2..]
get_prims :: Integer -> [Integer]
get_prims 1 = []
get_prims n = let p = head $ dropWhile (\x -> rem n x /= 0) prims
              in p:get_prims (div n p)
--next_prim xs = head $ dropWhile (\y -> any (\e -> rem y e == 0) xs) [last xs + 1..]
--prims = filter (\x -> not $ any (\n -> rem x n == 0) [2..(x-1)]) [1..] 
--pfactors n = [x | x <- takeWhile (\y ->  y*y <= n) [2..], n `mod` x == 0, null $ pfactors x] 
problem_3 :: Integer -> Integer
problem_3 x = last $ get_prims x
