1

这是我的代码:

import Data.Bits

main = print . sum . takeWhile( < 200000) $ multSum 999

multSum m = 3 : multiples [6..m]  where
    multiples (p:xs) 
       | ((p `mod` 3 == 0)  || (p `mod` 5 == 0)) = p : multiples([p..m])
       | otherwise = p : xs

错误:内存不足(请求 1048576 字节)

我哪里错了?

4

3 回答 3

4

multSum没有做你认为的那样。直接调试试试:

*Main> take 20 $ multSum 999
[3,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
于 2013-04-28T23:37:09.740 回答
4

multSum返回所有参数的无限列表[3,6,6,6,6...],因此它永远不会超过 200000,因此无法打印您请求的总和。

于 2013-04-28T23:37:42.760 回答
3

尝试

mults35 m = multiples [3..m] .....
  ............
  ....| ......    = p : multiples xs
  ... | otherwise =     multiples xs

还有一件事需要你添加。试试这个,你会看到的。

于 2013-04-28T23:46:59.007 回答