【问题标题】: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当前代码的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多