2012-10-12 15 views
12

Questo è un codice per verificare se un numero è quadrato perfetto o meno. Perché funziona?Perfetto quadrato o no?

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

risposta

41

Poiché tutti i quadrati perfetti sono somme di numeri dispari consecutivi:

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

e così via. Il tuo programma tenta di sottrarre numeri dispari consecutivi da n e vedere se scende a zero o diventa negativo.

Si può fare una prova informale di questo disegnando quadrati con lati di {1,2,3,4,...} e osservare che la costruzione di una piazza k+1 da piazza k richiede l'aggiunta di 2k+1 quadrati unitari.

+0

Grazie :) Non l'ho mai saputo. – Kaushal

+2

Risposta stupenda! –

+4

non puoi imparare queste cose a scuola :) –