1. Ограничим область поиска. Заметим, что при Х = 256 получим L = 3, а при Х = 512 L=4. Значит будем искать в этом диапазоне начиная с 512 до 256 (так как нам надо найти наибольшее число X при котором L = 3, M = 120).
2. В представленной ниже программе обеспечен досрочный выход из цикла, когда число X найдено.
var
i, x, L, M: integer;
begin
for i := 512 downto 256 do
begin
x := i;
L := 0;M := 1;
while x > 0 do
begin
L := L + 1;
M := M * (x mod 8);
x := x div 8;
end;
if (L = 3) and (M = 120) then break;
end;
writeln(' X = ',i,' L = ',L,' M = ',M);
end.
Результат работы программы:
X = 428 L = 3 M = 120