チャレンジ
以下の素数を見つけるためにスンダラムふるいを実装しますn。入力整数を受け取り、n以下の素数を出力しますn。これnは常に100万以下であると想定できます。
ふるい
から
1までの整数のリストから始めnます。次の形式の数字をすべて削除します
i + j + 2ij。iおよびj未満ですn。jは常に以上でi、これは以上です1。
i + j + 2ijより小さいか等しいn
残りの数値にを掛け
2、を加算し1ます。
これにより、すべての素数が得られます(ただし2、出力に含める必要のあるものを除く)2n + 2。
下の素数を見つけるのに使用されているふるいのアニメーションはこちらです202。

出力
出力は、すべての素数整数≤ n(昇順)とそれに続く改行である必要があります。
2
3
5
どこにnあり5ますか。
例
> 10
2
3
5
7
> 30
2
3
5
7
11
13
17
19
23
29
入力はで示され>ます。
(i,j)してi<=j、私たちは、この要件を無視した場合、結果は変わりません。バイトを節約するためにこれを実行できますか?
i <= j。それはふるいの仕組みの一部にすぎません。はい、あなたはi <= jあなたのコードで省くことができます。@xnor
2n+1ではないすべての奇数を選択することと同等です(結果は形式であるため)2(i + j + 2ij)+1-潜在的な素数でこのプロパティを直接テストできますか、コードはある時点で2 + 1の時間を実行する必要がありますか?
n全体の内容に少し混乱しています。メソッドの説明では、までのすべての素数を生成することを示してい2 * n + 2ます。しかし、入力/出力の説明では、入力はnであり、出力はすべてであると述べていますn。では、メソッドを適用して2 * n + 2、までのすべての素数を生成nし、出力よりも大きい素数をドロップすることになっていますか?またはn、入力からメソッドの説明を計算する必要がありますnか?
n=30は、出力に29が欠落しています。