我正在寻找方法为MaxPower()
功能提供以下最小代码,以提高内存效率。使用我的代码的例子。
MaxPower()
的目的:对于整数i
和N_remainder
,返回m
的最大值,使i^m
除以N_remainder
。
MaxPower()
除factorise()
时才会在i
函数中调用 N_remainder
目前,下面的链接代码对于要分解的数字具有以下结果(以标准格式书写):
在Linux Mint 17上使用的Python版本是2.74。
我正在学习python。
def MaxPower(i,N_remainder):
m=1
MxP=1
for n in range (2, N_remainder + 1):
b = i**n
a = N_remainder % b
if a==0:
m = m+1
else:
MxP = m
break
return MxP
自最初发布以来的修订代码:
def MaxPower(i,N_remainder):
m=1
MxP=1
for n in xrange (2, N_remainder + 1):
b = pow(i,n)
a = N_remainder % b
if a==0:
m = m+1
else:
MxP = m
break
return MxP
我知道以下情况(我现在没有尝试过新的和我目前的深度);
答案 0 :(得分:2)
Python 2 range
function创建一个列表,其中包含给定范围内每个数字的一个条目。整个列表需要存储在内存中,因此对于N_remainder
的大值,它可能会变得非常大。
相反,有xrange
函数,它几乎完全相同。这使用常量存储器,仅存储参数并仅在需要时计算每个值,并且一旦使用它们就不存储旧值。如果您通过调用range
替换对xrange
的调用,则您的函数应使用几乎常量的内存。
请注意,如果N_remainder + 1
对于python int
而言太大,则xrange
函数将无效,但文档提供了另一种选择。
不是内存问题,但您不需要显式调用long
;必要时,Python 2会自动转换为long
类型。