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; }