С небольшой правкой процедуры, уменьшающей вдвое время ее работы.
procedure KolDel(n: integer; var res: byte);
var
i: integer;
begin
res := 2;
for i := 2 to n div 2 do
if n mod i = 0 then
res := res + 1;
end;
var
m, n, i: longint;
mx, kd: byte;
begin
repeat
writeln('Введите интервал, 2 натуральных числа, второе больше первого');
readln(m, n);
until n > m;
mx := 1;
for i := m to n do
begin
KolDel(i, kd);
if kd > mx then mx := kd
end;
writeln('Наибольшее количество делителей имеют числа:');
for i := m to n do
begin
KolDel(i, kd);
if kd = mx then write(i, ' ')
end;
writeln;
write('количество=', mx);
readln
end.
А вот такой вариант работает в 3.5 раза быстрее:
procedure KolDel(n: integer; var res: byte);
var
i: integer;
begin
res := 2;
for i := 2 to n div 2 do
if n mod i = 0 then
res := res + 1;
end;
var
m, n, i: longint;
mx, kd, k: byte;
a: array[1..255] of longint;
begin
repeat
writeln('Введите интервал, 2 натуральных числа, второе больше первого');
readln(m, n);
until n > m;
mx := 1;
for i := m to n do
begin
KolDel(i, kd);
if kd > mx then begin mx := kd; k := 1; a[k] := i end
else
if kd = mx then begin k := k + 1; a[k] := i end
end;
writeln('Наибольшее количество делителей имеют числа:');
for i := 1 to k do Write(a[i], ' ');
Writeln;
Write('Количество=', mx);
readln
end.
Пример
Введите интервал, 2 натуральных числа, второе больше первого
37 86
Наибольшее количество делителей имеют числа:
60 72 84
Количество=12