-- 分解質因數
-- file: pfactors.hs
primes = sieve [2..]
where sieve (x:xs) = x : sieve (filter (/y ->y `rem` x /= 0) xs)
pfactors n = pfactors' n primes
where
pfactors' 1 _ = []
pfactors' _ [] = []
pfactors' n ps@(p:ps') =
if n `rem` p == 0 then
p : pfactors' (n `div` p) ps
else
pfactors' n ps'