チャレンジ
以下の素数を見つけるためにスンダラムふるいを実装します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が欠落しています。