2012-10-12 7 views
12

숫자가 완벽한 제곱인지 확인하는 코드입니다. 왜 작동합니까?완벽한 사각형인가요?

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

답변

41

모든 완전한 사각형 연속적인 홀수의 합이기 때문에 :

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

등이있다. 프로그램은 n에서 연속적인 홀수를 뺀 다음 0으로 떨어지거나 음수로 떨어지는 지 확인합니다.

당신은 {1,2,3,4,...}의 측면에 사각형을 그려이의 비공식 증거를하고 광장 k에서 사각형 k+1을 구성하는 2k+1 단위 사각형을 추가하는 필요로 관찰 할 수있다.

+0

감사합니다. 나는 이것을 결코 알지 못했습니다. – Kaushal

+2

굉장한 해답! –

+4

당신은 학교에서 이러한 것들을 배울 수 없습니다 :) –