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