Из математики известно, что квадрат любого числа n можно представить в виде суммы арифметической прогрессии вида 1+3+5+...+2n-1
Следовательно, достаточно последовательно вычислять сумму членов этой прогрессии до тех пор, пока либо не получим значение заданного числа (и тогда это количество и есть точное значение корня), либо квадрат количества членов накопленной суммы не превысит исходного числа (и тогда корень в целых числах не извлекается).
Программа на языке Паскаль (Free Pascal/Lazarus, Borland Delphi, PascalABC.Net, Pascal ABC).
!!! Гарантируется правильная работа программы при вводе натуральных чисел, не превышающих 9 223 372 030 926 249 001
var
i,n,m:int64;
begin
Write('Вводите: ');
Read(m);
n:=0;
for i:=1 to m div 2 do
begin
n:=n+2*i-1;
if (n>=m) then break
end;
if n=m then Writeln('Кв.корень(',m,')=',i)
else Writeln('Кв.корень(',m,') не является целочисленным')
end.
Примеры работы программы
Вводите: 255240500157504
Кв.корень(255240500157504)=15976248
Вводите: 225
Кв.корень(225)=15
Вводите: 56846356333463
Кв.корень(56846356333463) не является целочисленным
Вводите: 9223372030926249001
Кв.корень(9223372030926249001)=3037000499