MathematicaがPrimeQ関数(素数性をテストする)にBaillie–PSWテストを使用していることは明らかであり、私がMathematicaのドキュメントで読んだように、トライアル除算から始まり、ベース2と3のMiller–Rabin、そしてルーカスの疑似プライムテストです。私の質問は:
ベース2と3を削除し、ランダムベースのみを使用できますか?
また、ウィキペディア以外に、この素数性テストについて良い参考文献を提案できる人はいますか?
MathematicaがPrimeQ関数(素数性をテストする)にBaillie–PSWテストを使用していることは明らかであり、私がMathematicaのドキュメントで読んだように、トライアル除算から始まり、ベース2と3のMiller–Rabin、そしてルーカスの疑似プライムテストです。私の質問は:
ベース2と3を削除し、ランダムベースのみを使用できますか?
また、ウィキペディア以外に、この素数性テストについて良い参考文献を提案できる人はいますか?
回答:
基数2を使用する利点は、pspの基数2がまですべてわかっていることです。Baillie / Wagstaffの論文のいずれかの方法に従ってパラメータが選択された場合、これらのpsp(2)がLucasテストに合格しないことが確認されています。
ランダムなベースを選択した場合、FermatテストとLucasテストの両方に合格する複合が存在する可能性があります。たとえば、は強力なpspベースの76であり、Lucas疑似素数でもあります。
ちなみに、Lucasテストを実装する場合は、次のチェックを追加することをお勧めします。これは、Lucasの計算の最後に到達すると実質的に無料です。もし奇数の素数であり、(そして、いつものように、(ヤコビ記号)、次に。メソッド(Baillie / Wagstaffを参照)によって、が選択された場合、913は、これはこの合同が成り立つことです(白黒の論文では、しかし私は最近計算をさらに進めました)。したがって、sprp(2)およびslprp(P、Q)テストに加えて、この合同性は素数性テストに追加の強度を追加します。
テストのリファレンス:
Pomerance、Selfridge、Wagstaff、「The Pseudoprimes to 25 x 10 ^ 9」、1980年7月。ページ1024-1025、nが強い確率素数かどうかを確認2.メソッドA(Selfridge)を使用してnがLucas確率素数かどうかを確認またはB.著者は、反例の最初の発見者または存在しないことの証明に30ドルを提供します。テストについて議論するときに、次のペーパーを参照します。
BaillieとWagstaff、「Lucas Pseudoprimes」、1980年10月。ページ1401.試用版はいくつかの便利な制限に分割されます。方法A(セルフリッジ)またはBを使用して、nが強い確率素数かどうかを確認します。2. nが強力なLucas確率素数かどうかを確認します。
Pomerance、 " Baillie-PSW Primality Testの反例はありますか? "、1984。参考文献PSW80:nが強い確率素数ベースかどうかを確認2. Selfridgeパラメータを使用してnがLucas確率素数かどうかを確認(方法A) 。彼は、条件1が弱められても、n <= 25 * 10 ^ 9へのすべての合成は依然として失敗すると述べています。短い論文では、この強力なbase-2 prpとLucas-Selfridge prpの組み合わせを「Baillie-PSW」テストと繰り返し呼んでいます。
これらはすべて、強力なbase-2可能性のある素数検定の使用を説明しています。少し前のPSW論文はルーカステストを示していますが、BW論文は強力なルーカステストを推奨しています。1980年の論文は、2つの特定のパラメータ選択方法の1つを使用する必要があることを示していますが、Pomeranceの1984年の論文は、非セルフリッジ法を削除しています。
私の意見では、Baillie and Wagstaffの論文が主な参考資料ですが、Pomerance、Selfridge、Wagstaffと組み合わせて読む必要があります。時間の経過に伴うコンセンサスは、Selfridge(メソッドA)パラメーター選択を使用する必要があるということです。一般的に使用されるその他のバリエーションには、超強力テスト、「ほぼ」超強力テスト、およびフロベニウステストがあります。詳細とリンクについては、「Pseudoprime statistics、Data、and Tables」のページをご覧ください。
Mathematicaの質問に答えるには:
ピンチ(1993)に基づいて、Mathematicaはベース2の強力な疑似素数テストを本来の方法で行っていましたが、Baillieらのテストではない、不良な「Lucas」テストを使用していました。示した。ピンチはテストに疑似素数を見つけました。彼はまた、Wolframが何らかの方法でLucasテストを変更したが、BPSWに使用する必要があるLucasテストを使用しないことを示しています。Wolframからの情報がなければ、彼らがそれ以来過去24年間に彼らが何をしたのか私たちは知りません。おそらく、彼らは「ルーカス」テストを強化し、問題をカバーするためにベース3 MRテストを追加しました。多分彼らは今、適切なルーカステストを使用しています。わかりません。
正しいルーカステストが使用された場合、ベース3テストは削除され、他のほとんどのパッケージで使用されているものと同様のBPSWテストが残されます。2 ^ 64未満の反例は絶対になく、既知の大きな反例もありません。ベース3かランダムベースかに関係なく、別のテストを追加すると、64ビットを超える入力に対して少し確実性が増します。それは悪い考えではないと思います。
ベース2テストをランダムベーステストで置き換えることは、私の意見では悪い考えです。非常に優れた64ビットカウンターの例を含め、base 2を使用した結果はよく知られています。テストが確定的になります。ランダムなベースを使用しても、Lucasテストに関して反相関プロパティは保持されますが、トレードオフは異なります。個人的には、BPSW疑似プライムを密かに知っている敵を倒したい場合は、適切なBPSWテスト(base 2 SPRP + strong / AES / ES Lucas)と1つ以上のランダムベーステストを使用することをお勧めします。または、ルーカステストに加えて、フロベニウステストの余分な作業を追加します。
あなたは二つの質問をしている。最初に答えます。
Mathematicaがベース2と3のテストを最適化として使用している可能性は非常に高いです。これらの基底は、(その大きさのため)おそらくテストがより速く、両方の数値に対して機能します。必要に応じてこのテストをスキップできますが、結果の関数は平均して遅くなります。