0

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

1 回答 1

3

几件事:

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

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

  3. 如果你要走那么远,为什么不直接做def is_square(n): root = n**0.5; return int(root) == root呢?你会发现很多“改进你的算法”都是利用数学而不是蛮力。

无关,没有理由i += 1for循环内做。这就是for循环的作用。

于 2015-05-28T21:43:00.720 回答