【发布时间】:2009-12-06 14:41:40
【问题描述】:
我在 Project Euler 做question 266,经过一番搜索,发现this method 可以快速找到一个数的因数。你要做的是找到一个数的质因数的所有排列:这些就是它的因数。
我已经有一个模块来查找数字的主要功率因数,例如:
Main> primePowerFactors 196
[(2,2),(7,2)]
这基本上表明:2^2 * 7^2 == 196。从这里我想找到这些幂的所有排列,从而给出 196 的因数:
- (2^0)(7^0) = 1
- (2^1)(7^0) = 2
- (2^2)(7^0) = 4
- (2^0)(7^1) = 7
- (2^1)(7^1) = 14
- (2^2)(7^1) = 28
- (2^0)(7^2) = 49
- (2^1)(7^2) = 98
我想出了以下内容:
factors n = [a|a<-map facs (primePowerFactors n), y <- [0..(snd $ last $ primePowerFactors n)]]
where
facs (x,y) = (x,y)
rSq n = toInteger $ round $ sqrt (fromInteger n)
psr n = last $ dropWhile (<= rSq n) $ factors n
p = foldl' (*) 1 $ takeWhile (< 190) primes
answer = (psr p) `mod` (10^16)
但我的问题是factors 不能正常工作。我希望它对每个素数因子的指数的所有可能值进行置换,然后找到给出该因子的乘积。如何修改它以返回 n 的因子?
【问题讨论】:
标签: haskell factorization