整数 ceil(sqrt(x))

Integer ceil(sqrt(x))

answer 给出了以下仅使用整数计算 floor(sqrt(x)) 的代码。是否可以 use/modify 改为 return ceil(sqrt(x))?或者,计算该值的首选方法是什么?

编辑:谢谢大家,我很抱歉,我应该更明确一点:我希望有更多 "natural" 方法可以使用 floor(sqrt(x)),可能加一个. floor 版本使用牛顿法从上面求根,我想也许从下面求根或类似的方法可以解决问题。

例如,答案甚至提供了如何四舍五入到最接近的整数:只需在算法中输入 4*x

你可以利用这个事实:

floor(x) = (ceil(x) - 1) if x \not \in Z else ceil(x)

因此,检查N是否为2^k形式,代码相同,如果不相同,则可以-1当前代码的结果。

如果x是一个精确的平方,则平方根的上限和下限相等;否则,上限比平方根多一。所以你可以使用 (in Python),

result = floorsqrt(x)
if result * result != x:
    result += 1

修改您链接到的代码不是一个好主意,因为该代码使用了计算平方根的牛顿-拉夫森方法的某些属性。关于该方法已经发展了很多理论,并且代码使用了该理论。我显示的代码不如修改您的链接代码那么整洁,但它比更改代码更安全,而且可能更快。