内存分配是什么意思?

内存分配是什么意思?

我使用 Linux Mint 21.2,我的机器是 Intel Core i-7 6700 3.4GHZ。

我用 Python 编写了一个素数测试,并用大量数据对其进行了检查。

它就像许多测试一样,是小费马的变体,所以我做了一些模幂运算,例如powmod(3, n-1, n).

我可以证明那n = k * 2^k+1是 的素数k = 6679881。这并不奇怪,因为它已经被证明是素数。我的测试需要 124 小时才能完成这个 2.010.852 位数字。

现在我想检查费马数 F_33,它n = 2^(2^k)+1带有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²³+ 6679881 ≈2 2²³

n = 2^(2^k)+1 其中 k = 33

让我们将其除以前一个 n 的粗略大小,以了解此问题发生了多少次。

2 233 / 2 223 = 2 233-223 ≈ 2 233

换句话说,较大的 n 检查素数要复杂得多,以至于与新问题的指数相比,您等待的时间无关紧要,甚至不会出现。

相关内容