Другие языки программирования и технологии

Помогите, пожалуйста решить задачу на паскале.

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [20789; 35672], числа, имеющие ровно 5 различных делителей. Выведите эти делители для каждого найденного числа в порядке возрастания.
uses crt; var j, k, l, m, n: longint;
a: array of longint; begin clrscr(); j := 0;
setlength(a, j); for n := 20789 to 35672 do
begin l := 0; m := trunc(sqrt(n));
for k:=1 to m do if n mod k = 0 then l:=l+2;
if m * m = n then l := l - 1;
if l = 5 then begin j := j + 1; setlength(a, j);
a[j - 1] := n end end; for j := 0 to length(a) - 1 do
begin write(a[j], ': '); for k := 1 to a[j] do
if a[j] mod k = 0 then write(k, ' ') end;
writeln() end.
ДП
Дмитрий Присухин
66 572
Лучший ответ
Ровно 5 делителей имеет четвёртая степень простого числа.
12⁴ = 20736 меньше 20789
13⁴ = 28561 в диапазоне
14⁴ = 38416 больше 35672
Т.е. нам надо проверить всего ОДНО число. А т.к. 13 - простое число, то оно и будет обработано.
 begin writeln(sqr(sqr(13))) end. 
be
bersnukaev_82
83 585
 program superproga; 
var
i, j, k: integer;
arr: array of integer;
begin
for i := 20789 to 35672 do
begin
for j := 1 to i do
if i mod j = 0 then
begin
setlength(arr, length(arr) + 1);
arr[high(arr)] := j;
end;
if length(arr) = 5 then
begin
write(i);
write(': (');
for k := 0 to high(arr) do
if k high(arr) then
begin
write(arr[k]);
write(', ');
end
else
write(arr[k]);
writeln(')');
end;
setlength(arr, 0);
end;
end.
Edige Rahmetullayev
Edige Rahmetullayev
1 916