【发布时间】:2020-06-26 07:25:52
【问题描述】:
我需要实现一个求整数平方根的方法。
我的平台是 Solidity 语言,仅支持整数运算,输入大小为 256 位 (uint256)。
典型的解决方案是二分搜索,我很容易实现。
问题是我的方法仅限于输入小于2 ^ 129。
这是我的方法(用 Python 实现):
def sqrt(x):
assert(x < 0x200000000000000000000000000000000);
lo = 0;
hi = x;
while (True):
mid = (lo+hi)//2;
if (mid == lo or mid**2 == x):
return mid;
elif (mid**2 < x):
lo = mid;
else: # (mid**2 > x)
hi = mid;
请注意,我使用 Python 而不是 Solidity 发布了它,因为这里的大多数用户不熟悉 Solidity,所以我认为 Python 是一个不错的选择,以便其他人可以轻松地对我的方法应用更改。
不过,我通常对算法解决方案感兴趣。
【问题讨论】:
标签: algorithm binary-search fixed-point square-root