エラトステネスの篩の可視化 — 素数をフローチャートで

素数(1と自分自身でしか割り切れない数)を効率よく見つける古典的アルゴリズムです。やり方はシンプルで、小さい数から順に、その数の倍数を消していくだけ。最後まで消されずに残った数が素数です。下のグリッドとフローチャートを1ステップずつ進めて、数がふるい落とされていく様子を見てください。

上限 N:
素数(残った) いま調べている数 いま消した倍数 消された(合成数)

🔀 フローチャート(いま実行中の処理が光ります)

No Yes Yes No くり返し 開始 p ← 2 p×p ≤ N ? 残った数が素数 p は消えてない? p の倍数をすべて消す p ← p + 1

いま何をしているか

エラトステネスの篩とは

2からNまでの数を並べ、小さい素数から順に、その倍数を消していく方法です。「篩(ふるい)」の名のとおり、合成数(素数でない数)をふるい落とし、残った数が素数になります。手順はこうです。

手順1: まだ消えていない一番小さい数 p(最初は2)は素数。
手順2: p の倍数(2p, 3p, …)をすべて消す。
手順3: 次に残っている数へ進み、繰り返す。p×p が N を超えたら終了(それ以上は新たに消える数がない)。

なぜ「p×p まで」で十分なのか

N以下の合成数は、必ず√N 以下の素因数を持ちます。だから p が √N(= p×p が N)を超えたら、まだ消えていない数はすべて素数と確定します。無駄な走査を省ける、賢い打ち切り条件です。

🧩 アルゴリズムをもっと動かすなら:ループと配列の操作は 擬似言語ステッパー、フローチャート付きの探索・並べ替えは 探索ソート、最大公約数は ユークリッドの互除法 で確かめられます。

基本情報技術者試験ではこう出る

「エラトステネスの篩で素数を求める手順」「なぜ p×p(√N)まで調べれば十分か」「擬似言語での二重ループのトレース」などが問われます。小さい素数の倍数を消す → 残った数が素数という考え方を、上のグリッドとフローチャートで体に入れておきましょう。関連:ユークリッドの互除法擬似言語ステッパー可視化一覧