Because all perfect squares are sums of consecutive odd numbers:
- 1 = 1
- 4 = 1 + 3
- 9 = 1 + 3 + 5
- 16 = 1 + 3 + 5 + 7
and so on. Your program attempts to subtract consecutive odd numbers from n
, and see if it drops to zero or goes negative.
You can make an informal proof of this by drawing squares with sides of {1,2,3,4,...}
and observe that constructing a square k+1
from square k
requires adding 2k+1
unit squares.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…