エラトステネスのふるい

2〜Nまでの整数の中から、素数を求めるとする。
 「エラトステネスのふるい」のアルゴリズムは下のようになる。

(1) 2〜Nの数をすべて「ふるい」に入れる。
エラトステネスのふるい図1

(2) 「ふるい」の中で最小数を素数とする。
エラトステネスのふるい図2

(3) 今求めた素数の倍数をすべて「ふるい」からはずす。
エラトステネスのふるい図3

(4) (2)〜(3)を Nの平方根までくり返し「ふるい」に残った数が素数である。
エラトステネスのふるい図4

実際にプログラムを作る時には、「ふるい」として 配列を用意して、2〜Nの数をその配列「ふるい」に入れる。「ふるい」からはずす操作をその配列要素を0とすることにする。そして、配列要素が0ではないときにその配列要素を書き出せば、素数を書き出すプログラムになる。

これの流れ図を書いてみると次のようになる。
まずは、配列に2〜Nの整数を入れる。
エラトステネスのふるい流れ図1

そして、配列のなかで2からNの平方根までの倍数のところの配列要素を0に置き換えていく。
エラトステネスのふるい流れ図2

ここで、一度素数じゃないと決めた配列については、再び判断を行わないように、IF文を使ってDOループを飛び越している。

注意!
DOループの用いると書いていますが今回のプログラム例はFOR文を用いてループを回しています、これ以外にも改良の余地は十分あるので自分で考えてみてください。