Подтвердить что ты не робот

Отличная площадь или нет?

Это код для проверки, является ли число идеальным квадратом или нет. Почему это работает?

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

Ответ 1

Поскольку все совершенные квадраты представляют собой суммы последовательных нечетных чисел:

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

и т.д. Ваша программа пытается вычесть последовательные нечетные числа из n и посмотреть, падает ли она до нуля или идет отрицательная.

Вы можете сделать неофициальное доказательство этого, вычерчивая квадраты со сторонами {1,2,3,4,...} и заметим, что для построения квадрата k+1 из квадрата k требуется добавить квадратные единицы 2k+1.