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')
但它很难看,我不太相信大整数。我可以在正方形中迭代,如果超过这个值就放弃,但我认为这样做有点慢。我想我可能会重新发明轮子,这样的东西肯定已经存在于python中了。。。
Tags:
牛顿的方法对整数非常有效:
这将返回最大整数x,其中x*x不超过n。如果要检查结果是否正是平方根,只需执行乘法检查n是否是完美的平方。
我在my blog讨论这个算法,以及另外三个计算平方根的算法。
在标准库中更新:Python 3.8 has a ^{} function !
我在小(0…222)和大(250001)输入上对每个(正确的)函数进行了基准测试。在这两种情况下,明显的赢家都是排名第一的^{} suggested by mathmandan ,其次是Python 3.8的^{} ,第三是ActiveState recipe linked by NPE。ActiveState配方有一系列的分区,可以用移位来代替,这使它更快一些(但仍然落后于本机函数):
基准结果:
int(gmpy2.isqrt())
*:0.3微秒小,0.07毫秒大(*由于
gmpy2.isqrt
返回一个gmpy2.mpz
对象,该对象的行为主要与int
相似,因此可能需要将其转换回int
以供某些使用。)很抱歉,回复太晚了,我刚刚无意中看到这一页。如果将来有人访问这个页面,python模块gmpy2被设计成可以处理非常大的输入,其中包括一个整数平方根函数。
示例:
当然,所有东西都有“mpz”标签,但mpz与int兼容:
请参阅my other answer以了解有关此方法相对于此问题的其他一些答案的性能的讨论。
下载:https://code.google.com/p/gmpy/
相关问题 更多 >
编程相关推荐