2008/10/07

Project Euler: Problem 10

Problem 10

純粋にやると遅延評価のやりすぎによる stack over flow となった。seq を用いて遅延評価を回避している。

しかしこういう答えだと、純粋に和を求めなくともうまい方法があるのではと思ってしまう。いやたぶんあるんだろう。確信はないけど。

参考: sum の stack overflow - haskell のある暮らし

実行結果

$ runhaskell 10.hs
1000000000001

プログラム

1 primes = sieve [2..]
2     where sieve (p:ps) = p : [x | x <- ps, x `mod` p /= 0]
3
4 = strictSum 0 $ takeWhile (<= 2000000$ primes
5     where strictSum r []     = r
6           strictSum r (x:xs) = let r' = r+x
7                                 in r' `seq` strictSum r' xs
8
9 main = print $ f

trackback

trackback url: http://talototo.blog48.fc2.com/tb.php/367-4a7cf717

comment

post