【发布时间】:2014-11-10 20:48:45
【问题描述】:
我正在尝试创建一个函数,该函数将显示一个数字的主要因素以及我给它的列表(无限)。这是我目前所拥有的:
-- Here is a much more efficient (but harder to understand) version of primes.
-- Try "take 100 primes" as an example (or even more if you like)
primes = 2 : primesFrom3 where
primesFrom3 = sieve [3,5..] 9 primesFrom3
sieve (x:xs) b ~ps@(p:q:_)
| x < b = x : sieve xs b ps
| otherwise = sieve [x | x <- xs, rem x p /= 0] (q^2) (tail ps)
-- Write a function that factors its first argument using the (infinite)
-- list of available factors given in its second argument
-- (using rem x p /= 0 to check divisibility)
primeFactsWith :: Integer -> [Integer] -> [Integer]
primeFactsWith n (p:ps) = if (rem n p /= 0) then
(primeFactsWith n ps)
else (primeFactsWith p ps)
上半部分不是我写的,效果很好。我试图让下半场工作,但事实并非如此。阅读代码中的 cmets 以更好地了解我想要做什么。谢谢!哦,请不要只是说出答案。给我一些关于如何做的提示,也许是什么问题。
【问题讨论】:
-
您也可以尝试
primes = 2 : 3 : sieve [5,7..] 9 primesFrom3 where ...并比较main = print (primes !! n)中增加ns 的内存使用率(以及时间)。将其作为独立可执行文件运行($> primes +RTS -s以查看统计信息),使用优化开关 -O2 编译。
标签: haskell primes prime-factoring