python 或标准库中是否有整数平方根?我希望它是精确的(即返回一个整数),并且如果输入不是完美的平方则引发异常。
我尝试使用这段代码:
def isqrt(n):
i = int(math.sqrt(n) + 0.5)
if i**2 == n:
return i
raise ValueError('input was not a perfect square')
但它很丑陋,而且我不太相信它能处理大整数。我可以迭代这些方块,如果超出了该值,我可以放弃,但我认为这样做会有点慢。另外,这肯定已经在某个地方实施了吗?
See also: Check if a number is a perfect square https://stackoverflow.com/questions/2489435.
Note:现在有math.isqrt https://docs.python.org/3/library/math.html#math.isqrt在 stdlib 中,自 Python 3.8 起可用。
牛顿法对于整数非常有效:
def isqrt(n):
x = n
y = (x + 1) // 2
while y < x:
x = y
y = (x + n // x) // 2
return x
这将返回最大的整数x为此x * x不超过n。如果你想检查结果是否正好是平方根,只需执行乘法来检查是否n是一个完美的正方形。
我讨论了这个算法,以及用于计算平方根的其他三种算法,位于my blog http://programmingpraxis.com/2012/06/01/square-roots/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)