また [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秒程度で終わってくれる。

Copyright© 2011-2021 Shunsuke Otani All Right Reserved .