素数メニューのサムネイル
エラトステネスの篩 (paizaランク C 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

整数 N が素数であるかを判定する方法として、エラトステネスの篩という方法があります。
これは 0 以上 N 以下の全ての数について次の手順で素数判定を行う方法です。

1. X が素数のとき is_prime[X] が true となる配列 is_prime を用意し、
is_prime[0] , is_prime[1] を false , それ以外を true で初期化する。

2. 整数 i を 2 から順に N まで動かしながら次の操作を行う。
「is_prime[i] が true である場合、 is_prime[2×i], is_prime[3×i], ... , is_prime[k×i] を全て false にする(ただし k×i <= N )


整数 N が与えられるので、エラトステネスの篩を用いて N が素数かどうかを判定してください。
なお、「整数 N が素数である」とは「N が 1 でない、かつ N の約数が 1 と N のみしか存在しない」ことをいいます。

入力される値

N


・ 1 行で整数 N が与えられます。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

N が素数である場合には "YES" を、素数でない場合は "NO" を 1 行で出力してください。
出力の末尾には改行を入れてください。

条件

・ 1 ≦ N ≦ 1,000,000

入力例1

2

出力例1

YES

入力例2

837

出力例2

NO

問題一覧へ戻る

ページの先頭へ戻る