私は大学の学生で、大きな素数を見つける必要がある課題があります。私は教授から次の「単純な」アルゴリズムを与えられ、2つの可能性のある素数を見つけました。
- 1 < a < p の場合、ランダムな a と p を生成します
- gcd(a,p) が = 1 であることを確認します -- これは、カーマイケル数を削除することを想定しています Edit(meant equal to 1)
- x ^ (p-1) % p = 1 の場合、「モジュラー累乗」を実行します。ここで、x はゼロから始まり、p と a の両方で p-1 まで増加します
3番目のステップの例。
p = 5 とします。
1^4 %5 = 1
2^4 %5 = 1
3^4 %5 = 1
4^4 %5 = 1
これは 5 が素数であることを示しています。
この課題を通して、素数の計算は冗談ではないことに気づきました。上記のアルゴリズムで見られる問題は、大きな数を推測して剰余累乗でテストしている場合、大きな数を大きな数に上げようとしている可能性があることです。これは私の心に疑問を投げかけます。私は決定論的有限オートマトンとエラトステネスのふるいも調べました。指定されたアルゴリズムを改善するか、何らかの支援を提供するための提案はありますか? ありがとうございました。