2024-09-28 22:40:13 发布
网友
当我运行下面的代码时,我得到内存错误
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
我明白,因为这里的数学计算,但我不知道如何更正它。在
我猜你在使用Python2.7(或者至少是2.x)。在
如果是这样,您应该使用xrange,而不是range。在
xrange
range
在python3.x中,range创建一个迭代器,它只使用几个字节的内存,而不管内存有多大。在Python2.x中,range总是创建一个包含在指定范围内递增(或递减)的数字的列表。调用range(some_large_number)会导致2.x中内存不足
range(some_large_number)
因此,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等整除
我把它留给你去弄清楚它的概括性。这是个有趣的问题:)
我猜你在使用Python2.7(或者至少是2.x)。在
如果是这样,您应该使用
xrange
,而不是range
。在在python3.x中,
range
创建一个迭代器,它只使用几个字节的内存,而不管内存有多大。在Python2.x中,range
总是创建一个包含在指定范围内递增(或递减)的数字的列表。调用range(some_large_number)
会导致2.x中内存不足因此,python2.x有
xrange
,它创建了一个与3.x中的range
相同的迭代器另外,你可以简化你的数学。例如:
然而,有更有效的方法来做到这一点。在
举个简单的例子,如果这个数字可以被2整除,那么可以每隔一个数字迭代一次,将测试的数量减少一半。同样,如果它可以被3,5等整除
我把它留给你去弄清楚它的概括性。这是个有趣的问题:)
相关问题 更多 >
编程相关推荐