328
Un Pătrat Magic este un pătrat ce conține numerele de la 1 la n 2 în care sumele fiecăror linii, coloane și a celor două diagonale sunt egale. Această sumă se mai numește și constanta pătratului magic.

Cerința
Să se scrie in limbajul c++ o funcție numita magic care are ca argument un număr natural c ți care să se verifice dacă există un pătrat magic cu constanta c.
Subprogramul va returna latura pătratului, adică n, sau 0 dacă nu există pătrat magic cu constanta c.
Restricții și precizări
1 ≤ c < 18.446.744.073.709.551.616
Exemplu
magic(34) = 4, magic(88) = 0.
int magic(unsigned long long val)
{
unsigned long long dr = 1000000 , st = 0, m , n = 0;
if(val < 15) n = 0;
else
{
while(st <= dr && n == 0)
{
m = (st + dr) / 2;
if((m * m * m + m) / 2 == val) n = m;
else if((m * m * m + m) / 2 < val) st = m + 1;
else dr = m - 1;
}
}
return n;
}
Comentarii