数年前、 PRIMES が Pにあることが証明されました。Python で素数性テストを実装するアルゴリズムはありますか? 単純なジェネレーターでいくつかのベンチマークを実行し、それがどれほど速いかを自分で確認したかったのです。私はそれを自分で実装しますが、それを行うには論文をまだ十分に理解していません。
20733 次
3 に答える
55
簡単な答え: いいえ、AKS テストは素数性をテストする最速の方法ではありません。(一般化された) リーマン仮説を仮定する、および/または無作為化する、はるかに高速な素数性テストがあります。(たとえば、 Miller-Rabinは実装が高速で簡単です。) この論文の真のブレークスルーは理論的なものであり、GRH やその他の証明されていない予想を仮定せずに、素数性をテストするための決定論的多項式時間アルゴリズムが存在することを証明しました。
とはいえ、それを理解して実装したい場合は、Scott Aaronson の短い記事が役立つかもしれません。すべての詳細を説明するわけではありませんが、12 ページ中 10 ページから始めれば十分です。:-)実装のリスト(ほとんどが C++) もここにあります。
また、最適化と改善 (数桁) については、このレポート、(古い) Crandall と Papadopoulos のレポート、または (さらに古い) Daniel J Bernstein のレポートを参照してください。それらのすべてには、実装に適したかなり詳細な擬似コードがあります。
于 2008-12-07T18:02:27.197 に答える
-6
はい、rosettacode.org の素数ページの AKS テストを見てください。
def expand_x_1(p):
ex = [1]
for i in range(p):
ex.append(ex[-1] * -(p-i) / (i+1))
return ex[::-1]
def aks_test(p):
if p < 2: return False
ex = expand_x_1(p)
ex[0] += 1
return not any(mult % p for mult in ex[0:-1])
print('# p: (x-1)^p for small p')
for p in range(12):
print('%3i: %s' % (p, ' '.join('%+i%s' % (e, ('x^%i' % n) if n else '')
for n,e in enumerate(expand_x_1(p)))))
print('\n# small primes using the aks test')
print([p for p in range(101) if aks_test(p)])
出力は次のとおりです。
# p: (x-1)^p for small p
0: +1
1: -1 +1x^1
2: +1 -2x^1 +1x^2
3: -1 +3x^1 -3x^2 +1x^3
4: +1 -4x^1 +6x^2 -4x^3 +1x^4
5: -1 +5x^1 -10x^2 +10x^3 -5x^4 +1x^5
6: +1 -6x^1 +15x^2 -20x^3 +15x^4 -6x^5 +1x^6
7: -1 +7x^1 -21x^2 +35x^3 -35x^4 +21x^5 -7x^6 +1x^7
8: +1 -8x^1 +28x^2 -56x^3 +70x^4 -56x^5 +28x^6 -8x^7 +1x^8
9: -1 +9x^1 -36x^2 +84x^3 -126x^4 +126x^5 -84x^6 +36x^7 -9x^8 +1x^9
10: +1 -10x^1 +45x^2 -120x^3 +210x^4 -252x^5 +210x^6 -120x^7 +45x^8 -10x^9 +1x^10
11: -1 +11x^1 -55x^2 +165x^3 -330x^4 +462x^5 -462x^6 +330x^7 -165x^8 +55x^9 -11x^10 +1x^11
# small primes using the aks test
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
于 2015-04-23T21:04:51.520 に答える