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

196. Составьте программу получения в порядке убывания всех делителей данного числа.

196. Составьте программу получения в порядке убывания всех делителей данного числа. с коментариями. Pascal.
Для определённости рассматриваем только натуральные числа n до 2³¹-1 включительно. Тогда суть алгоритма состоит в том, чтобы проверить все натуральные числа k от 1 до √n - 1 на потенциальную делимость и в случае делимости добавлять в динамический массив сразу два числа: k и n/k. Они оба будут делителями. Потом полученный массив можно отсортировать по убыванию, например, пузырьком:
var j, k, l, m, n: longint;
a: array of longint;
begin l := 0; write('n = ');
readln(n); m := trunc(sqrt(n));
if m * m = n then begin
l := l + 1; setlength(a, l);
a[l - 1] := m end;
for k := 1 to m - 1 do
if n mod k = 0 then begin
l := l + 2; setlength(a, l);
a[l - 2] := k;
a[l - 1] := n div k end;
for j := 1 to l - 1 do
for k := l - 1 downto j do
if a[k - 1] < a[k] then
begin m := a[k - 1]; a[k - 1] := a[k];
a[k] := m end;
for k := 0 to l - 1 do
writeln(k + 1: 3, ') ', a[k]) end.
Есть более затратный по времени алгоритм: проверять все ненулевые целые числа на делимость от модуля до минус модуля введённого числа, которое может быть в том числе и отрицательным, но так неинтересно...
ИИ
Ибрахим Исламходжаев
66 572
Лучший ответ
Евгений Cтариков Извините, но надо по коммандам расписать)
Кубат Жарбеков чиста конкретна - искать только простые делители.
var i:integer;
begin
for i:=196 downto 1 do
if 196 mod i=0 then write(i,' ')
end.
Виталий Семкин
Виталий Семкин
83 853

Похожие вопросы