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

そこにもう 1 つ追加することがあります。これを試してみてください。

于 2013-04-28T23:46:59.007 に答える