【发布时间】:2015-08-11 14:31:35
【问题描述】:
我一直在研究一个问题,以确定给定整数 n 是否是完美正方形。虽然算法有效,但我得到了MemoryError。我应该如何改写这段代码?
提前致谢。
def is_square(n):
for i in range(1, (n/2)):
i += 1
if n % i == 0 and n // i == i:
return True
return False
【问题讨论】:
-
首先,如果这是python2,请尝试将
range更改为xrange。前者将生成 1 到 n/2 之间的所有整数的列表,并将它们全部保存在内存中。 -
如果没有导致它的输入,就无法判断出了什么问题。仅供参考,您只需要检查
while i * i <= n'i' 从 1 开始的位置。顺便说一句,为什么在 for 语句中将 i 增加 1? -
感谢@eric-appelt,xrange 成功了!
-
@marcadian,我将 i 增加了 1,以便它从 1 而不是 0 开始。
-
为什么不让您的
range从 2 开始?这是第一个值得检查的因素。这样你就不需要在开始或循环时使用奇怪的i += 1。
标签: python memory-management perfect-square