今年の素数日を計算してみる

  • 2
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

2012年の素数日は以前計算したのだが、今年2013年の素数日も計算してみる。
前のコード、コマンドライン第1引数を年と解釈して計算するように仕様を変えた。

primedays.hs
import Data.Time.Calendar
import System (getArgs)
isPrime n=not $ or $ map (\a->n `mod` a==0)
            $ takeWhile (\i->i*i<=n) [2..]
primeDays y=map (\a->filter (/= '-') $ show a) $ takeWhile (< fromGregorian (y+1) 1 1) 
      $ iterate (\d->addDays 1 d) $ fromGregorian y 1 1
main=do
  args<-getArgs
  case args of
    y:_ ->mapM_ (\a->putStrLn a) $ filter (isPrime.read) $ primeDays $ read y
    _ ->putStrLn "Usage: primedays <year>"

実行してみる

> ghc primedays
> primedays 2013
20130203
20130223
20130403
20130413
20130503
20130521
20130527
20130529
20130707
20130829
20131019
20131031
20131103
20131109
20131117
20131129
20131207
20131211
20131217
20131229

ということで、今日2/3の次は2/23のようです。
素数萌えの皆さん、参考まで。