program DigitPower;
{$mode objfpc}{$H+}
{ compute sum of digits }
function DigitSum(n: Int64): Int64;
var
s: Int64;
begin
s := 0;
while n > 0 do
begin
s := s + (n mod 10);
n := n div 10;
end;
DigitSum := s;
end;
var
n, s, p: Int64;
k: Integer;
begin
n := 2;
while True do
begin
s := DigitSum(n);
// Try powers k = 2..10 (enough for reasonable ranges)
p := s * s;
for k := 2 to 10 do
begin
if p = n then
begin
writeln('Found: ', n, ' = (', s, ')^', k);
halt(0);
end;
p := p * s; // next power
end;
Inc(n);
end;
end.
(*
run:
Found: 81 = (9)^2
*)