module Solutions.P36 (primeFactorsMultiplicity) where
import Data.List (genericLength, group)
import Problems.P35
primeFactorsMultiplicity :: Integral a => a -> [(a, a)]
primeFactorsMultiplicity :: forall a. Integral a => a -> [(a, a)]
primeFactorsMultiplicity = ([a] -> (a, a)) -> [[a]] -> [(a, a)]
forall a b. (a -> b) -> [a] -> [b]
map (\[a]
xs -> ([a] -> a
forall {a}. Num a => [a] -> a
factor [a]
xs, [a] -> a
forall i a. Num i => [a] -> i
genericLength [a]
xs)) ([[a]] -> [(a, a)]) -> (a -> [[a]]) -> a -> [(a, a)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [a] -> [[a]]
forall a. Eq a => [a] -> [[a]]
group ([a] -> [[a]]) -> (a -> [a]) -> a -> [[a]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [a]
forall a. Integral a => a -> [a]
primeFactors
where factor :: [a] -> a
factor [] = a
1
factor (a
x:[a]
_) = a
x