program DigitPower;
{$mode objfpc}
uses
SysUtils;
// 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
results: array[0..2] of Int64;
count: Integer;
n, s, p: Int64;
k: Integer;
begin
count := 0;
for n := 2 to High(Int64) do
begin
if count >= 3 then
break;
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);
results[count] := n;
Inc(count);
break; // stop checking powers for this n
end;
p := p * s; // next power
end;
end;
WriteLn;
WriteLn('First 3 numbers:');
for k := 0 to 2 do
WriteLn(results[k]);
end.
(*
run:
Found: 81 = (9)^2
Found: 512 = (8)^3
Found: 2401 = (7)^4
First 3 numbers:
81
512
2401
*)