module H35 ( primeFactors , primes ) where primeSift (x:xs) = (x:) $ primeSift $ filter ((/=0).(`mod` x)) xs primes = primeSift [2..] primeFactors x = pF x primes where pF a xxs@(x:xs) | a == 1 = [] | a `mod` x == 0 = x:(pF (div a x) xxs) | otherwise = pF a xs factor :: Integer -> [Integer] factor 1 = [] factor n = let prime = head $ dropWhile ((/= 0) . mod n) [2 .. n] in (prime :) $ factor $ div n prime