--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2008/10/03

Project Euler: Problem 5

Problem 5

はじめに書いたのは 20 から調べはじめ、OK なら終了、ダメなら +20 して再調査するというもの。これはかなり遅く、インタプリタで実行すると終了するのを待てないほどだった。

次に書いたのは、2から20の最小公倍数を求めるというもの。Haskell には lcm という最小公倍数を求める関数があり、それを使った。こちらはそれなりに高速に動作し、インタプリタでも問題なかった。

自戒としてヘボ版と改良版の両方をあげるとする。

実行結果 - ヘボ版

$ ./5
232792560

プログラム - ヘボ版

1 divide x = and [x `mod` n == 0 | n <- [20,19..2]]
2
3 = lookup 20
4     where lookup x | divide x = x
5                    | otherwise = lookup (x+20)
6
7 main = print $ f

実行結果 - 改良版

$ runhaskell 5.hs
232792560

プログラム - 改良版

1 = foldl1 lcm [2..20]
2 main = print $ f
スポンサーサイト

comment

post




上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。