primes = 2 : filter (null . tail . primeFactors) [3,5..]
primeFactors n = factor n primes
where
factor n (head:tail)
| head*head > n = [n]
| n `mod` head == 0 = head : factor (n `div` head) (head:tail)
| otherwise = factor n tail
main :: IO ()
main...