wvogel日記

自分用の技術備忘録が多めです.

素数列挙2

今気がついたのですが、さきほどの素数列挙の、改良版。


prime の最後の行を、

prime n = if n `mod` 2 == 0 then False else prime' n (n-2)

として、更にprime' を次のように書き換えます。



prime' n 1 = True
prime' n x 
    | n `mod` x == 0 = False
    | n `mod` x /= 0 = prime' n (x-2)

これでも動くはずですね。まだ動作確認はしていないけれど。

素数は2を除けば、偶数で割れませんので、奇数でのあまり判定だけしています。
実行回数も、より速くなります。