我想仅使用列表理解方法和/或找到给定数字的所有素因数.
Haskell 中的(函数组合运算符)。我特别想避免递归解决方案。
例如,pfactors 120
必须产生[2,2,2,3,5]
output.
I tried:
pfactors n = [p | p <- [2..n], n `mod` p == 0, [d | d <- [1..p], p `mod` d == 0] == [1,p]]
但当我打电话时pfactors 120
,结果是[2,3,5]
,并非所有素因数。
我是这样做的:
pfactors :: Integer -> [Integer]
pfactors n = [ p
| p <- [2..n] -- Possible factors
, [d | d <- [1..p], p `mod` d == 0] == [1,p] -- Are prime
, _ <- [ p | i <- [1..n], n `mod` p^i == 0] ] -- Divisible powers
它本质上是您拥有的解决方案,但不同之处在于它最后有一个额外的列表理解,其中包含与p
因素纳入n
.
免责声明现实中我真的不会这么做。
EDIT我觉得写上面的内容很脏,所以作为参考,这更接近我要写的内容:
pfactors' :: Int -> [Int]
pfactors' = unfoldr firstFactor
where
firstFactor n =
listToMaybe [(f, n `div` f)
| f <- [2..n]
, n `mod` f == 0]
依赖项: Data.List (unfoldr)
, Data.Maybe (listToMaybe)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)