D07 エラトステネスの篩
素数を効率的に求める方法である、エラトステネスの篩(ふるい)を用いて、素数を列挙してみます。独自のツールは作成せずに作図しました。通常の篩は、
2からnまでの整数を書く。
2に丸をつけ、2より大きい2の倍数にバツを付ける。
以下は、まだ消されていない最小の整数に丸をつけ、その2倍以上の倍数にバツを付ける。
という手順をすべての整数に丸かバツが付くまで反復します。しかし、下での実装は、上の手順の「3.」の所を
次の整数にバツが付いていなければ丸を付け、その2倍以上の倍数にバツを付ける。
としていて、効率が悪いです。n を動的にしたうえで、通常の手順を実行する方法は思いつきませんでした。
スライダー n は整数の値をとるようにしています。list1 は、x軸上に丸を描いています。list2 は、合成数であればx軸上に丸を描きますが、プロパティダイアログで内部を塗るようにしています。結果としては、下の図のように、素数の点には塗られていない丸、合成数の点には塗られた丸が並びます。