为了练习,我编写了一个Haskell程序来查找主要因素。
代码如下:
getfactors :: Int -> [Int]
getfactors n = [x | x<-[1..n], n `mod` x == 0]
prime :: Int -> Bool
prime n | getfactors n == [1,n] = True
| otherwise = False
primefactors :: Int -> [Int]
primefactors n = [x | x <- getfactors n, prime x == True]
对于较小的数字,一切都可以正常工作,但是当我输入较大的数字时,计算将以最大的质因数停止,预期的列表不会关闭。 例如:
>primefactors 1263
[3,421]
>primefactors 1387781234
[2,7,2161,6553
非常感谢您的解释。
答案 0 :(得分:4)
无法复制:
> :set +s
> primefactors 1387781234
[2,7,2161,6553]
(368.04 secs, 288,660,869,072 bytes)
您的算法非常慢。有很多方法可以改善它:
可能还有其他简单的机会可以加快处理速度,还有很多先前的工作需要在线阅读。享受吧!