AKSの素数性テストが実際に他のテストよりも高速になるのはいつですか?


24

私はそれについて学ぶときにAKSの素数性テストがどのように解釈されるべきか、例えばPRIMES⊆Pを証明するための帰結、またはコンピューターでの素数性テストのための実際の実用的なアルゴリズムのアイデアを得ようとしています。

テストには多項式ランタイムがありますが、高度であり、可能な限り高い定数があります。それでは、実際には、どので他の素数性テストを上回っていますか?ここで、は素数の桁数であり、「surpass」は典型的なコンピューターアーキテクチャでのテストのおおよその実行時間を指します。nnn

私は、機能的に比較可能なアルゴリズム、つまり、正確さのために推測を必要としない決定論的なアルゴリズムに興味があります。

さらに、テストのメモリ要件を考えると、他のテストよりもこのようなテストを使用していますか?

回答:


23

簡単な答え:決して、実用的な目的のために。現在のところ実用的ではありません。

測定された素数時間

最初に、「実用的な」複合性テストを素数性証明から分離しましょう。前者は、ほぼすべての目的に十分に適していますが、適切と感じるテストのレベルはさまざまです。2 ^ 64未満の数値の場合、確定的回答には7つのMiller-Rabinテスト、または1つのBPSWテストが必要です。これはAKSよりもはるかに高速であり、すべての場合で同じように正確です。2 ^ 64を超える数値の場合、BPSWが適切な選択肢であり、ランダムベースのMiller-Rabinテストが追加されるため、非常に少ないコストで信頼性が向上します。ほとんどすべての証明方法は、安価であり、ほぼ確実に素数であるハードワークのみを実行することを意味するため、このようなテストで開始(または実行)します。

証明に移ります。いずれの場合も、結果の証明には推測が必要ないため、これらを機能的に比較できます。APR-CLの「落とし穴」は、完全に多項式ではないということです。ECPP/ fastECPPの「落とし穴」は、予想よりも時間がかかる数値が存在する可能性があることです。

グラフには、2つのオープンソースAKS実装が示されています。1つ目はv6ペーパーからのもので、2つ目はBernsteinとVolochからの改善と、Bornemannからの優れたr / sヒューリスティックです。これらは、多項式の乗算にGMPのバイナリセグメンテーションを使用するため、非常に効率的です。また、メモリの使用は、ここで検討するサイズでは問題になりません。これらは、対数グラフ上で〜6.4の傾きを持つすてきな直線を生成します。これは素晴らしいことです。ただし、1000桁に外挿すると、APR-CLとECPPの数分に対して、数十万年から数百万年の推定時間に到達します。2002年のBernsteinの論文からさらに最適化を行うことができますが、これにより状況が実質的に変わるとは思いません(ただし、実装するまでこれは証明されていません)。

最終的にAKSは試験部門を破りました。BLS75定理5(n-1証明など)メソッドでは、n-1の部分的な因数分解が必要です。これは小さなサイズでうまく機能し、幸運でn-1を因数分解するのも簡単ですが、最終的には大きなセミプライムを因数分解する必要があります。より効率的な実装がありますが、実際には100桁を超えてスケ​​ーリングすることはありません。AKSがこのメソッドを渡すことがわかります。したがって、1975年に質問をした場合(そして当時のAKSアルゴリズムがあった場合)、AKSが最も実用的なアルゴリズムであるクロスオーバーを計算できます。しかし、1980年代後半には、APR-CLと他のサイクロトミック手法が正しい比較であり、1990年代半ばにはECPPを含める必要がありました。

logloglognO(log5+ϵ(n))O(log4+ϵ(n))

O(log4+ϵ(n))(lgn)4+o(1)(lgn)4+o(1)

これらのアルゴリズムの一部は、簡単に並列化または分散できます。AKSは非常に簡単です(各「s」テストは独立しています)。ECPPはそれほど難しくありません。APR-CLについてはわかりません。

ECPPおよびBLS75メソッドは、独立して迅速に検証できる証明書を生成します。これは、AKSおよびAPR-CLよりも大きな利点です。AKSおよびAPR-CLでは、実装とそれを作成したコンピューターを信頼するだけです。


18

(漸近的に)最も効率的な確定的素数判定アルゴリズムは、に起因するLenstraとPomerance時間で実行されている、。拡張リーマン仮説を信じている場合、ミラーのアルゴリズムは時間内に実行されます。他にも多くの決定論的素数テストアルゴリズムがあります。たとえば、ミラーの論文にはO~(log6n)ON1/7O~(log4n)O~(n1/7)O(lognO(logloglogn))

O~(log2n)280O~(log2n)

これらすべてのテストで、メモリは問題ではありません。


彼らのコメントでは、jbappleは実際にどの素数テストを使用するかを決定する問題を提起しています。これは実装とベンチマークの問題です。いくつかのアルゴリズムを実装して最適化し、どの範囲でどれが最速かを実験的に決定します。好奇心の強い人のために、PARIのコーダーはまさにそれを行い、決定論的関数isprimeと確率論的関数を考え出しispseudoprimeまし。どちらもここにあります。使用される確率検定はMiller–Rabinです。決定論的なものはBPSWです。


Dana Jacobsenからの詳細情報は次のとおりです。

バージョン2.3以降のPariは、に対してAPR-CLの素数性証明を使用し、に対してisprime(x)BPSWの可能性のある素数テスト(「ほぼ強力な」ルーカステスト)を使用しispseudoprime(x)ます。

それらは動作を変更する引数を取ります:

  • isprime(x,0) (デフォルト。)組み合わせ(BPSW、クイックポックリントンまたはBLS75定理5、APR-CL)を使用します。
  • isprime(x,1)n1
  • isprime(x,2) APR-CLを使用します。

  • ispseudoprime(x,0) (デフォルト。)BPSWを使用します(基数2のMR、「ほぼ非常に強い」ルーカス)。

  • ispseudoprime(x,k)k1kmpz_is_probab_prime_p(x,k)

Pari 2.1.7は、さらに悪いセットアップを使用していました。 isprime(x)単にMRテスト(デフォルトは10)であり、isprime(9)かなり頻繁にtrueを返すなどの楽しいことにつながりました。を使用isprime(x,1)するとPocklingtonの証明が行われます。これは約80桁で問題ありませんでしたが、一般的に使用するには遅すぎました。

また、実際には、これらのアルゴリズムは遅すぎるため、誰これらのアルゴリズムを使用していません。 私はあなたの意味を知っていると思いますが、これはあなたの聴衆によっては強すぎると思います。AKSはもちろん驚くほど遅いですが、APR-CLとECPPは十分に高速であるため、一部の人々はそれらを使用しています。それらは偏執的な暗号化に役立ち、実証済みの素数を求めるのに十分な時間があるようなprimegaps場合factordbに役立ちます。

[それについての私のコメント:特定の範囲の素数を探すとき、私たちはいくつかのふるい分けアプローチに続いていくつかの比較的迅速な確率的テストを使用します。その場合にのみ、決定的なテストを実行します。]

これらすべてのテストで、メモリは問題ではありません。 これはAKSの問題です。たとえば、このeprintを参照してください。これのいくつかは実装に依存します。numberphileのビデオがAKSと呼んでいるもの(実際にはFermatのリトル定理の一般化)を実装すると、メモリ使用量が非常に高くなります。参考文献のようなv1またはv6アルゴリズムのNTL実装を使用すると、大量のメモリがバカになります。優れたv6 GMP実装では、1024ビットプライムに対して約2GBを使用しますが、これは多くの場合このような少数のメモリ。バーンスタインのいくつかの改善とGMPバイナリセグメンテーションを使用すると、成長が大幅に改善されます(たとえば、1024ビットで最大120MB)。これは、他の方法が必要とするよりもはるかに大きく、驚くことではありませんが、APR-CLまたはECPPよりも数百万倍遅くなります。


2
これらのテストの定数の計算を必要とする、提示された質問にこれが答えるとは思わない。
jbapple 14年

1
ひどくずさんな、労力のかからない投稿、または明らかに危険なほど間違った回答に遭遇した場合は、必ずダウン票を使用してください。 —この回答を下回った人が投票を正当化する方法がわかりません。
–PålGD 14

2
n

nlogn

良い投稿ですが、「誰もいない」というあなたの定義は、ほんの少し外れています。好奇心から、openssl pkeyparam -textPARI isprime(前述のAPR-CL )を使用してOpenSSLで生成された2048ビットDSAの可能性のある素数を検証するのにかかる時間(16進文字列の抽出を使用)をテストしました:高速ノートブックで約80秒。参考までに、Chromiumには、フロベニウステストの JavaScriptデモ実装(MRよりもはるかに強力)の反復ごとに0.25秒強が必要であるため、APR-CLは確かに偏執的ですが実行可能です。
アルネフォーゲル

2

O(f(n))O(f(n))O(g(n))nnn

このトピックを詳細/詳細に分析するarxivに関するこの最近の論文を見ましたが、これまでに反応を聞いたことがない、おそらく学生が作成した論文のようですが、おそらく最も詳細な/包括的な分析の1つです利用可能なアルゴリズムの実用的な使用法。


AKSは何よりも効率的ですか?競争とは何ですか?
ユヴァルフィルマス14年

他のすべてのアルゴリズム。主に確率?論文の詳細
vzn 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.