计算平方根的奇怪方法

时间:2016-12-17 00:43:31

标签: c math sqrt

我被告知此代码段相当于(int)sqrt(n)

int s(int n) {
    for (int i = 1, k = 0; n > 0; i += 2) {
        if (k + i > n)
            return i / 2;
        k += i;
    }
    return 0;
}

它似乎有效, 但我不明白它是如何工作的?

1 个答案:

答案 0 :(得分:10)

它使用了x^2 = 1 + 3 + 5 + ... + (2*x-1)这一事实。这里i超过奇数,k是他们的总和。当总和超过n时,它会停止。此时i == (2*x-1) + 2 x是平方根,所以x == floor(i/2)