【发布时间】:2012-02-08 06:06:40
【问题描述】:
有几种方法可以仅使用整数算术来找到整数平方根。例如this one。它使阅读变得有趣,同时也是一个非常有趣的理论,特别是对于我这一代,这些技术不再那么有用了。
主要是它不能使用浮点运算,因此排除了牛顿方法及其推导。我知道的唯一另一种求根的方法是二项式展开,但这也需要浮点运算。
有哪些技术/算法可以仅使用整数算术来计算整数 n 次根?
编辑:感谢到目前为止的所有答案。他们似乎都在进行稍微聪明的试验和改进。有没有更好的办法?
Edit2:好的,所以如果没有试验/改进以及牛顿法或二进制搜索,似乎没有聪明的方法可以做到这一点。谁能提供两者的比较理论上?我在两者之间运行了许多基准测试,发现它们非常相似。
【问题讨论】:
-
您需要的输入值范围是多少?
-
@PaulR,理想情况下它可以是可扩展的,但我认为您现在可以假设基数和数字都是 32 位(无符号)整数。
-
您允许哪些整数运算?平方根是一种特殊情况,因为可以仅使用加法、减法和移位来提取它们。
-
@Neil,我不想对其施加限制,因为这不适用于特定的应用程序,但我会说一个类似于 C 整数运算符列表的列表:加法,减法、乘法、(整数)除法、模运算和按位运算。 Ofc 速度始终是一个考虑因素,但不要太担心。
-
@Mat 通常在计算机上,我希望您会使用 2 作为基础,这似乎可以避免问题。
标签: algorithm math integer square-root