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
|