整数和数学的Python内存错误

2024-09-28 22:40:13 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行下面的代码时,我得到内存错误

import math
X = 600851475143
halfX = math.trunc(int(X / 2))
countFactors = 0
for i in range(halfX):
    if i >0 and X % i:
        countFactors += 1
print countFactors

我明白,因为这里的数学计算,但我不知道如何更正它。在


Tags: and内存代码inimportforif错误
1条回答
网友
1楼 · 发布于 2024-09-28 22:40:13

我猜你在使用Python2.7(或者至少是2.x)。在

如果是这样,您应该使用xrange,而不是range。在

在python3.x中,range创建一个迭代器,它只使用几个字节的内存,而不管内存有多大。在Python2.x中,range总是创建一个包含在指定范围内递增(或递减)的数字的列表。调用range(some_large_number)会导致2.x中内存不足

因此,python2.x有xrange,它创建了一个与3.x中的range相同的迭代器

另外,你可以简化你的数学。例如:

x = 600851475143
half_x = x // 2

count_factors = 0
for i in xrange(half_x):
    if i > 0 and x % i == 0:
        count_factors += 1

print count_factors

然而,有更有效的方法来做到这一点。在

举个简单的例子,如果这个数字可以被2整除,那么可以每隔一个数字迭代一次,将测试的数量减少一半。同样,如果它可以被3,5等整除

我把它留给你去弄清楚它的概括性。这是个有趣的问题:)

相关问题 更多 >