12

这是一个检查数字是否是完美平方的代码。为什么它有效?

static bool IsSquare(int n)
{
    int i = 1;
    for (; ; )
    {
        if (n < 0)
            return false;
        if (n == 0)
            return true;
        n -= i;
        i += 2;
    }
}
4

1 回答 1

44

因为所有完全平方都是连续奇数的和:

  • 1 = 1
  • 4 = 1 + 3
  • 9 = 1 + 3 + 5
  • 16 = 1 + 3 + 5 + 7

等等。您的程序尝试从 中减去连续的奇数n,并查看它是下降到零还是变为负数。

您可以通过绘制边为 的正方形来非正式地证明这一点,{1,2,3,4,...}并观察k+1从正方形构造正方形k需要添加2k+1单位正方形。

于 2012-10-12T15:45:40.460 回答