Ответ 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
.