haskell - Haskell的主要因素是

  显示原文与译文双语对照的内容
75 2

我是Haskell的新成员。

如何生成包含下一个整数的主要因子的列表列表?

现在我只知道如何生成质数:

primes = map head $ iterate ((x:xs) -> [y | y<-xs, y `mod` x/= 0 ]) [2..]
时间:原作者:0个回答

143 0

确定 n的主要因素的一种简单方法是

  • [2..n-1] 中搜索第一个除数 d
  • 如果存在:返回d : primeFactors(div n d)
  • 否则返回 n ( 因为 n 是素数)

代码:

prime_factors :: Int -> [Int]
prime_factors 1 = []
prime_factors n
 | factors == [] = [n]
 | otherwise = factors ++ prime_factors (n `div` (head factors))
 where factors = take 1 $ filter (x -> (n `mod` x) == 0) [2.. n-1]

这很明显可以以使用大量优化( 仅从 2到 sqrt(N), 缓存搜索到目前为止找到的数字) 。

更新

使用案例的稍微修改过的版本( 如 @user5402): 所建议的那样)

prime_factors n =
 case factors of
 [] -> [n]
 _ -> factors ++ prime_factors (n `div` (head factors))
 where factors = take 1 $ filter (x -> (n `mod` x) == 0) [2.. n-1]
原作者:
...