在不使用sqrt函数的情况下查找平方根的底限

时间:2013-03-07 17:56:52

标签: c++ algorithm

假设我有一个整数n,我希望找到该数字的平方小于m的最大数n

这个问题的最佳解决方案是什么?

2 个答案:

答案 0 :(得分:9)

“最优解决方案”很少存在,但合理快速的算法如下(任何人都知道它的名字?),它被称为巴比伦方法:

int num = 4567;

int r1 = num / 2;
int r2 = 2;

while (std::abs(r2 - r1) > 1) {
     r2 = (r1 + r2) / 2;
     r1 = num / r2;
}

此处r1r2是平方根的较低和较高近似值。在你的情况下,你需要较小的一个。

答案 1 :(得分:0)

由于你只是在寻找整数部分,你可以这样做:

  1. 以尽可能低的m开始循环,即m = 1(除非您允许n <1)
  2. 检查m * m是否大于n
  3. 如果不是,你需要检查下一个m,所以加1到m并继续循环的下一次迭代
  4. 如果它更大,则停止循环并从m中减去1,因为m-1的最终值小于n的平方根。
  5. int n = 123; //or whatever you want
    int m = 1;
    while (m * m <= n) {
        m = m + 1;
    }
    return (m - 1);