D07 エラトステネスの篩

素数を効率的に求める方法である、エラトステネスの篩(ふるい)を用いて、素数を列挙してみます。独自のツールは作成せずに作図しました。通常の篩は、

    1. 2からnまでの整数を書く。

    2. 2に丸をつけ、2より大きい2の倍数にバツを付ける。

    3. 以下は、まだ消されていない最小の整数に丸をつけ、その2倍以上の倍数にバツを付ける。

という手順をすべての整数に丸かバツが付くまで反復します。しかし、下での実装は、上の手順の「3.」の所を

    • 次の整数にバツが付いていなければ丸を付け、その2倍以上の倍数にバツを付ける。

としていて、効率が悪いです。n を動的にしたうえで、通常の手順を実行する方法は思いつきませんでした。

スライダー n は整数の値をとるようにしています。list1 は、x軸上に丸を描いています。list2 は、合成数であればx軸上に丸を描きますが、プロパティダイアログで内部を塗るようにしています。結果としては、下の図のように、素数の点には塗られていない丸、合成数の点には塗られた丸が並びます。