python,square finder,内存错误

时间:2015-05-28 21:33:18

标签: python memory-management perfect-square

我一直在研究一个问题,以确定给定的整数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

1 个答案:

答案 0 :(得分:3)

一些事情:

  1. 这似乎是Python2代码(因为range(1, n/2)会在Python3中为所有奇数TypeError s抛出n。您应该使用xrange代替range,正如Eric Appelt在评论中所建议的那样。当你真的需要一个生成器时,Python2中的range会创建一个列表。

  2. 您可以通过检查i * i == n(或i**2 == n)来减少您正在执行的操作次数。然后你进行一次乘法(或指数)和一次等式检查,而不是一次mod,一次floordiv和两次相等检查。

  3. 如果你走得那么远,为什么不做def is_square(n): root = n**0.5; return int(root) == root?您会发现很多"改进您的算法"正在利用数学而不是蛮力。

  4. 无关,没有理由在i += 1循环中执行for。这就是for循环的作用。