Найти все делители натурального числа в отсортированном порядке

Опубликовано: 13 Января, 2023

Для заданного натурального числа n выведите все его различные делители.

Примеры:

 Input : n = 10       
 Output: 1 2 5 10

 Input:  n = 100
 Output: 1 2 4 5 10 20 25 50 100

 Input:  n = 125
 Output: 1 5 25 125 

Мы настоятельно рекомендуем обратиться к приведенной ниже статье в качестве предварительного условия.
Найти все делители натурального числа | Набор 1
В приведенном выше посте мы нашли способ найти все делители в O (sqrt (n)).
Однако в решении все еще есть небольшая проблема, вы можете догадаться?
Да! вывод не отсортирован, как мы получили методом грубой силы.

Как распечатать вывод в отсортированном порядке?
Если мы посмотрим на результат, который мы получили, мы можем проанализировать, что делители напечатаны зигзагообразным образом (маленькие, большие пары). Следовательно, если мы сохраним половину из них, мы можем распечатать их в отсортированном порядке.

Ниже приведена реализация для того же самого:

Временная сложность: O (sqrt (n))
Вспомогательное пространство: O (sqrt (n))

Способ 2:

Подход: в приведенном ниже подходе с использованием цикла for мы сначала печатаем только числа, у которых остаток равен 0, и как только мы прерываем цикл, мы просто печатаем частное чисел, которое дает остаток как 0.

давайте разберемся на примере:

n = 10 
from 1 to 10
keep checking n % 1 == 0 print 1
              n % 2 == 0 print 2
              3, 4, 5, 6, 7, 8, 9 will not give remainder 0 
              exit loop;
              
The 1 and 2 which gives remainder as 0 it also mean that n is perfectly divisible by 1 and 2 so in second for loop keep printing the quotient on dividing by 1 and 2 which left remainder 0
from 10 to 1 
keep checking n % 1 == 0 print n/1 
              n % 2 == 0 print n/2   
              exit loop

Временная сложность: O (sqrt (n))

Вспомогательное пространство: O(1)
Спасибо Mysterious Mind за предложенное выше решение.

Условие if между двумя циклами используется, когда угловые коэффициенты в условии циклов имеют разницу 1 (пример - коэффициенты 30 (5,6) здесь, 5 будут напечатаны два раза; для решения этой проблемы требуется этот шаг.

Эта статья предоставлена Ашутош Кумар. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.