LoginSignup
2
0

More than 5 years have passed since last update.

シクシク素数列 Advent Calendar 2018 Julia編

Last updated at Posted at 2018-12-03

この記事は「シクシク素数列 Advent Calendar 2018」4日目になります。

言語は Julia を使って解いたのですが、素数関連の関数を使用する関係上バージョン 0.4 を使っています。
お題の詳細はココに譲るとして、早速解答と解説を見ていきましょう!

解答

print(join(filter(x->ismatch(r"4|9","$x")&&isprime(x),(1:1319).')[1:parse(readline())],","))

オンライン実行環境で見る

解説

  1. (1:1319).' で1から1319までの配列をつくる。
  2. その配列の中から filter で「素数 かつ 4か9が含まれる 数字 - ☆」を抽出する。「素数」の判定には isprime 関数、「4か9が含まれる」の判定には ismatch 関数を使う。与えられた数字が☆を満たすかどうか判定する際に「素数」の判定を後回しにしているのは、「4か9が含まれる」の判定のほうが「素数」の判定より早く判定でき、「4か9が含まれる」を満たさない場合は「素数」の判定のために無駄な計算をしなくて済むからである。
  3. ☆を満たす数字の配列の先頭から標準入力で与えられた数字(parse(readline()))分取り出す。
  4. 3. で取り出した配列を join 関数でカンマ区切りで結合する。
  5. 結果を print 関数で標準出力する。
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0