Program prog; function Search(n: integer): integer; var input: array[1..4] of integer; even: array[1..4] of integer; atLestOne: boolean; begin input[1] := n div 1000; input[2] := n mod 1000 div 100; input[3] := n mod 100 div 10; input[4] := n mod 10; if (input[1] mod 2 = 0) begin even[1] := input[1]; atLestOne := True; end; if (input[2] mod 2 = 0) begin even[2] := input[2]; atLestOne := True; end; if (input[3] mod 2 = 0) begin even[3] := input[3]; atLestOne := True; end; if (input[4] mod 2 = 0) begin even[4] := input[4]; atLestOne := True; end; if atLestOne = True then Search := Low(even) else Search := -1; end;
Сумма 4-х степеней N-значного числа не превосходит N * 9^4 < 10000N. С другой стороны, N-значное число больше 10^(N-2). Для того, чтобы одно было равно другому, должно выполниться 10^(N - 2) < 10000N, 10^N < N * 10^6. Так может быть, только если N < 7, поэтому ищем числа среди 1..999999.
Код: function Sum4Deg(n: integer): integer; var s: integer; begin s := 0; repeat s := s + sqr(sqr(n mod 10)); n := n div 10; until n = 0; Sum4Deg := s; end;
var i: integer; begin for i := 1 to 999999 do if i = Sum4Deg(i) then writeln(i); end.
function Search(n: integer): integer;
var
input: array[1..4] of integer;
even: array[1..4] of integer;
atLestOne: boolean;
begin
input[1] := n div 1000;
input[2] := n mod 1000 div 100;
input[3] := n mod 100 div 10;
input[4] := n mod 10;
if (input[1] mod 2 = 0)
begin
even[1] := input[1];
atLestOne := True;
end;
if (input[2] mod 2 = 0)
begin
even[2] := input[2];
atLestOne := True;
end;
if (input[3] mod 2 = 0)
begin
even[3] := input[3];
atLestOne := True;
end;
if (input[4] mod 2 = 0)
begin
even[4] := input[4];
atLestOne := True;
end;
if atLestOne = True then
Search := Low(even)
else
Search := -1;
end;
С другой стороны, N-значное число больше 10^(N-2).
Для того, чтобы одно было равно другому, должно выполниться
10^(N - 2) < 10000N, 10^N < N * 10^6.
Так может быть, только если N < 7, поэтому ищем числа среди 1..999999.
Код:
function Sum4Deg(n: integer): integer;
var
s: integer;
begin
s := 0;
repeat
s := s + sqr(sqr(n mod 10));
n := n div 10;
until n = 0;
Sum4Deg := s;
end;
var
i: integer;
begin
for i := 1 to 999999 do
if i = Sum4Deg(i) then
writeln(i);
end.