我通过浏览learnyouahaskell来学习haskell,做了haskellwiki的99个问题,并且还计划了euler问题。我昨天大部分时间都在PE problem 3工作,没有成功,因为我的所有解决方案都会运行很长一段时间并且我的电脑耗尽了。我通读haskell wiki page on prime numbers但仍然没有成功,所以我放弃并查看了here发布的解决方案。
以下是代码:
primes = 2 : filter ((==1) . length . primeFactors) [3,5..]
primeFactors n = factor n primes
where
factor n (p:ps)
| p*p > n = [n]
| n `mod` p == 0 = p : factor (n `div` p) (p:ps)
| otherwise = factor n ps
它很快,它会立即吐出答案,但我不能围绕这段代码。具体来说,primes
功能以及过滤器发生了什么,以及primes
调用primeFactors
和primeFactors
调用primes
的方式。如果我在GHCI中运行primes
,它会创建一个无限的素数列表,我无法找出原因。
答案 0 :(得分:2)
我目前正在通过Euler项目问题并实施一个基于主筛的非常基本的解决方案,并且遇到与您的解决方案相同的问题,因为它会长时间运行任何数量的中等大小或更大
正如meditans在对你的问题的评论中所说的那样,看看this question,特别是Will Ness的第一个评论和接受的答案,这些都对我有很大帮助。
我还发现这两个HaskellWiki页面帮助我理解解决方案以及为其他问题编写自己的函数。