How to find the first integer equal to the sum of its digits raised to some power in Pascal

1 Answer

0 votes
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

*)

 



answered 1 day ago by avibootz

Related questions

...