How to find the first 3 integers equal to the sum of their digits raised to some power in Pascal

1 Answer

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

*)

 



answered 1 day ago by avibootz

Related questions

...