Нельзя использовать кодовые слова, которые начинаются с 0 или с 10. 11 также не можем использовать, поскольку тогда мы больше не сможем взять никакое другое кодовое слово, а нам их нужно пять. Поэтому берём трёхзначное 110. По Условию Фано, если есть a, то ab существовать не может. Другими словами, мы не можем использовать начало с 0, а если возьмем 11, то начинать другие числа не сможем. Поэтому остается брать числа 110,1110,1111(последний берем без 0, т.к. он последний и других чисел уже не нужно, но если бы и было нужно, то стоит взять число 11110 не нарушая условия Фано)
// PascalABC.NET 3.1, сборка 1239 от 08.05.2016 begin var b:array[1..6,1..6] of integer:=( (19,21,23,25,27,29),(57,59,61,63,65,31), (55,81,83,85,67,33),(53,79,89,87,69,35), (51,77,75,73,71,37),(49,47,45,43,41,39)); var a:array[1..6,1..6] of integer; var k:=2; var k0,k1:integer; for var i:=1 to 6 do begin for var j:=1 to 6 do Print(b[i,j]); Writeln end; Writeln; repeat k0:=0; k1:=0; Writeln('k=',k); for var i:=1 to 6 do begin for var j:=1 to 6 do begin if (b[i,j] mod k) mod 2=0 then begin a[i,j]:=1; Inc(k1) end else begin a[i,j]:=0; Inc(k0) end; Print(a[i,j]) end; Writeln end; Writeln('k0=',k0,', k1=',k1); if k0<>k1 then Inc(k) until k0=k1; Writeln(NewLine,'k=',k) end.
Код программы;
var i, sum, fact, n, t:integer;
begin
sum := 0;
fact := 1;
writeln('Числа:');
for i:=100 to 999 do begin
n := i;
while n <> 0 do begin
t := n mod 10;
while t <> 0 do begin
fact:= fact * t;
t := t - 1;
end;
sum := sum + fact;
fact:= 1;
n := n div 10;
end;
if i=sum then
write(i, ' ');
sum := 0;
end;
end.
P.S. Из трехзначных чисел под условие подходит только число 145