Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
整数和数学的Python内存错误_Python_Memory_Integer - Fatal编程技术网

整数和数学的Python内存错误

整数和数学的Python内存错误,python,memory,integer,Python,Memory,Integer,当我运行下面的代码时,我得到内存错误 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) 如果是这种情况

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

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

在Python3.x中,
range
创建一个迭代器,该迭代器只使用几个字节的内存,而不管它有多大。在Python2.x中,
range
总是创建一个列表,其中包含在指定范围内向上(或向下)计数的数字。调用
range(一些大号码)
可能会导致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等整除


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

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

如果是这种情况,您应该使用
xrange
而不是
range

在Python3.x中,
range
创建一个迭代器,该迭代器只使用几个字节的内存,而不管它有多大。在Python2.x中,
range
总是创建一个列表,其中包含在指定范围内向上(或向下)计数的数字。调用
range(一些大号码)
可能会导致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等整除


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

您使用的是python 2.x还是3.x?(
range
在您的示例中,如果使用2.x,将尝试创建一个非常大的列表)您应该使用
xrange()
而不是
range()
。完美。非常感谢。顺便说一句,
X%i
与“X可被i整除”不是一回事。当X可被i整除时,
X%i
的计算结果为零。作为一种计算因子的方法,效率非常低。为什么不将
X
因子化为素数并确定素数因子的多重性?结果是1减去(m+1)的乘积,其中m的范围是素数的多重数。您使用的是python 2.x还是3.x?(
range
在您的示例中,如果使用2.x,将尝试创建一个非常大的列表)您应该使用
xrange()
而不是
range()
。完美。非常感谢。顺便说一句,
X%i
与“X可被i整除”不是一回事。当X可被i整除时,
X%i
的计算结果为零。作为一种计算因子的方法,效率非常低。为什么不将
X
因子化为素数并确定素数因子的多重性?结果是1减去(m+1)的乘积,其中m在素数的多重数范围内。