メモリ割り当てはどういう意味ですか?

メモリ割り当てはどういう意味ですか?

私はLinux Mint 21.2を使用しており、私のコンピュータはIntel Core i-7 6700 3.4GHZです。

Pythonで疎水性テストを作成し、多くのデータを持って確認してみました。

多くのテストと同様に、Fermatの変形なので、モジュラー指数化を行いましたpowmod(3, n-1, n)

私はそれが少数であることn = k * 2^k+1を証明できますk = 6679881。これは少数であることが証明されたので驚くべきことではありません。私のテストでは、この2.010.852桁の数字を完了するのに124時間かかりました。

n = 2^(2^k)+1今に含まれているペルマの数F_33を確認したいと思いますk = 33。この数字は約2.500.000桁です。

実行すると、数分後に次のエラーが発生します。

NU MP: Cannot allocate memory (size=549755818000)
bash: line 1: 19354 Aborted 
(core dumped)

私にこのテストを見る機会がありますか?

答え1

512GB RAMを使用しようとしています。プログラムを最適化するか、サーバーをリースします。

交換するのは役に立たないと思います。

答え2

続行できるとしても、結果を見ることはほとんど不可能です。なぜなら、このエラーはメモリが不足していることを示しているからです。

私がエンディングを絶対に見ることができないと言う理由は次のとおりです。

複雑さを比較してみましょう。

n = k * 2^k+1 は k = 6679881 の素数です。

6,679,881は約2²³(実際に安全な上限線)なので、n≒2 2²³+ 66798812 2²³です。

n = 2^(2^k)+1 ここで k = 33

この問題が何回発生するかを調べるために、古いnのおおよそのサイズに分けてみましょう。

2233 / 2223 = 2233-2232233

言い換えれば、より大きいnの素数をチェックすることははるかに複雑であり、待つ時間が新しい問題の指数と比較して重要ではないし、起こらない。

関連情報