PまたはNP完全であることがわかっている区間に素数があるかどうかを判断していますか?


13

stackoverflowのこの投稿から、数値の間隔をふるいにかける比較的高速なアルゴリズムがあり、その間隔に素数があるかどうかを確認しました。ただし、これは、(間隔に素数が存在するかどうか)の全体的な決定問題がPにあることを意味しますか?(私は読んでいないその投稿に対する多くの答えがあったので、この質問が重複または不要)。

一方では、間隔が十分に大きい場合(たとえば)、バートランドの仮説のようなものが適用され、この間隔には間違いなく素数があります。ただし、2つの素数の間に任意の大きなギャップがあることも知っています(たとえば。 [ N N + N ][N2N][NN+N]

決定問題がPIにある場合でも、対応する検索問題も扱いやすいため、バイナリ検索を実行するときに既知の素数の分布に関して同じプロパティを使用できない場合があります。

回答:


17

あなたの問題は次のとおりです。

入力:整数 質問:素数はありますか?[ u ]あなたは
[あなたは]

私の知る限り、その問題がPにあるかどうかはわかりません。

私が知っていることは次のとおりです。

  • 素数テスト(単一の数を与え、素数であるかどうかをテストする)はPであるため、範囲が十分に小さい場合、範囲内の各数を徹底的にテストして素数であるかどうかを確認できますが、一般的なアルゴリズム。

  • 場合クレイマーの推測が真である場合、問題はP.クラマーの推測であるの近くに連続した素数の間のギャップと言うである、以下のアルゴリズムがPになりますので:数字を繰り返し処理し、それぞれが素数かどうかをテストします。素数のあるものを見つけた場合は、すぐに「はい」と答えます。あなたがヒットした場合、応答なしで停止します。Cramerの予想では、ほとんどの素数性テストの後に停止するため、アルゴリズムは多項式時間で実行されます。O ログN 2+ 1 + 2 + 3 ... U O ログ2nOログn2+1+2+3あなたはOログ2

    残念ながら、プライムギャップに関する既知の結果は、問題がPにあることを無条件に証明するほど強力ではないようです。

  • 別の簡単なアルゴリズムを次に示します。からランダムな整数繰り返し選択し、それが素数であるかどうかをテストします。素数を見つけた場合、またはすべての整数を試したが素数がなかった場合は停止します。発見的には、これが実際に効率的であると期待すべきです。素数定理は、の近くでランダムに数を選択すると、それが素数である確率は約なることを示してい。したがって、経験則的に、約回の反復の後、通常はプライムとストップ(存在する場合)が見つかることを期待する必要があります。一方、クーポンコレクターの問題により、範囲素数がない場合r[あなたは][あなたは]あなたは1/ログnOログあなたは[あなたは]、約反復後に停止します。したがって、素数間の最長ギャップのサイズに適切な上限がある場合、これは問題がBPPにあることを意味します。このような上限がなくても、ランダム問題のインスタンスは簡単です。Oあなたはlログあなたはl

  • おそらく、実際に実行時間を改善するためにふるい分け方法を適用することができます(例えば、小さな素数で割り切れる数の素数テストを行わないようにするため)。これが漸近的な改善につながるかどうかはわかりません。

  • これらの手法により、問題はおそらく実際には簡単です。

  • 上記の発言により、私は個人的に問題がNP完全であることを疑っています。


プライムシーブを使用して時間で実行できませんか?Oあなたは
-Quelklef

@Quelklef、確かに、しかしそれは指数関数的な時間がかかります(入力の長さの指数関数的)。多項式時間アルゴリズムがあるかどうか、つまり、時間で実行されるアルゴリズムがあるかどうかを尋ねています。Oポリログあなたは
DW

OポリログあなたはOポリあなたは

ログあなたはあなたは

必要ありません、あなたは私の混乱を解消しました。どうもありがとう!
-Quelklef
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.