ザネリは列車を見送った

ブログという名の備忘録

HaskellでProject Euler(Problem 5 補足)

また [1..100]>>=pen さんに色々アドバイスをいただいた。

Problem 5 修正版1

「リストの中の自分以外の要素で自分を割り切れる数があれば除外」という
自前の処理で divisors を作っていたが、19, 18…1 のリストの前半部分とした。
(確かに結局自前の処理で欲しかったリストはこれだけで得られた)
また、candidates の最後の値 (foldl1 (*) divisors) は product divisors としたほうがいいが、
nの値によっては (n * 2) > (product divisors) となり、
candidates が空リストになってしまうので、
終了値を指定しない無限リストとすることにした。

Problem 5 修正版2

やっていることはほとんど同じだけど、filter 関数で条件に該当する値のみ取ってきている箇所を
リスト内包表記で書くとこうなる。

最適化オプション

今まで ghci でhsファイルをロードして実行確認していたが、
ghc -O hoge.hs と最適化オプションをつけてコンパイル後に実行すると
速くなる場合が多いようなので、
今回からコンパイル後にも実行確認することに。
euler5-3.hs, euler5-4.hs ともにコンパイル後では1秒程度で終わってくれる。