nbFactors 1 _ = [] nbFactors x (p:ps) = exponent : nbFactors rest ps where (exponent,rest) = countClean 0 x countClean e y = case divMod y p of (y',0) -> countClean (e+1) y' _ -> (e,y)