summaryrefslogtreecommitdiff
path: root/H35.hs
blob: caa59c0ba13205f1a90a675c59ec107a9e4eeb52 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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