Другие языки программирования и технологии
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.
Есть более затратный по времени алгоритм: проверять все ненулевые целые числа на делимость от модуля до минус модуля введённого числа, которое может быть в том числе и отрицательным, но так неинтересно...

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.
Есть более затратный по времени алгоритм: проверять все ненулевые целые числа на делимость от модуля до минус модуля введённого числа, которое может быть в том числе и отрицательным, но так неинтересно...

Евгений Cтариков
Извините, но надо по коммандам расписать)
Кубат Жарбеков
чиста конкретна - искать только простые делители.
var i:integer;
begin
for i:=196 downto 1 do
if 196 mod i=0 then write(i,' ')
end.
begin
for i:=196 downto 1 do
if 196 mod i=0 then write(i,' ')
end.
Похожие вопросы
- Составьте программу, отыскивающую наибольший элемент массива A(N) из числа принадлежащим интервалу {min,(min+max\2))
- даны 3 разл целых числа a,b,c используя оператор GOTO составить программу для ввода чисел в порядке убывания
- С++ Составьте программу определения наибольшего общего делителя двух натуральных чисел .
- Дан двумерный массив целых чисел. Упорядочить прямую диагональ в порядке убывания.
- как решить через abc pascal задачу "Дано натуральное число n. Получить все простые делители этого числа"
- Напишите программу, которая выводит на экран все делители числа N, (число N вводится с клавиатуры) абсПАСКАЛЬ ПОМОГИТЕ
- вывести PID процессов в порядке убывания С++ Как можно вывести PID процессов в порядке убывания на с++?
- найти все семизначные числа, которые делятся на 15 и записываются только цифрами 0 и 1. Составить программу на паскале
- 1. Составить программу, определяющую совпадают ли первая и вторая цифры трехзначного числа. и ещё 4 в пояснении
- Упорядочить массив по убыванию из 10 случайных чисел на промежутке от -500 до 500. Информатика, 9 класс.