【问题标题】:Integer ceil(sqrt(x))整数 ceil(sqrt(x))
【发布时间】:2018-12-16 10:37:10
【问题描述】:
answer 给出了以下代码,用于仅使用整数计算 floor(sqrt(x))。是否可以使用/修改它以返回ceil(sqrt(x))?或者,计算此类值的首选方法是什么?
编辑:到目前为止,谢谢大家,我很抱歉,我应该更明确地说:我希望使用floor(sqrt(x)) 有更“自然”的方式来做到这一点,可能再加一个。 floor 版本使用牛顿的方法从上面接近根,我认为也许从下面接近它或类似的方法可以解决问题。
例如,答案甚至提供了如何舍入到最接近的整数:只需在算法中输入4*x。
【问题讨论】:
标签:
math
integer
square-root
【解决方案1】:
如果x 是一个精确的正方形,则平方根的上限和下限相等;否则,上限比平方根大一。所以你可以使用(在 Python 中),
result = floorsqrt(x)
if result * result != x:
result += 1
修改您链接到的代码不是一个好主意,因为该代码使用了计算平方根的 Newton-Raphson 方法的某些属性。关于该方法已经开发了许多理论,并且代码使用了该理论。我展示的代码不像修改链接代码那样简洁,但它比更改代码更安全,可能更快。
【解决方案2】:
您可以使用以下事实:
floor(x) = (ceil(x) - 1) if x \not \in Z else ceil(x)
因此,检查N是否为2^k的形式,代码是否相同,如果不是,您可以-1当前代码的结果。