python,square finder,内存

2024-05-07 23:31:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: and代码in算法falsetrueforreturn
1条回答
网友
1楼 · 发布于 2024-05-07 23:31:10

有几件事:

  1. 这似乎是Python2代码(因为range(1, n/2)会在Python3中为所有奇数n抛出一个TypeError)。你应该使用xrange而不是Eric Appelt在评论中建议的rangerange在Python2中创建一个列表,而实际上您只需要一个生成器。

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

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

不相关的,没有理由在for循环内执行i += 1。这就是for循环的作用。你知道吗

相关问题 更多 >