Вывести количество делителей и делители числа

Задача

В введенном промежутке натуральных чисел найти те, количество делителей у которых не меньше введенного значения. Для найденных чисел вывести на экран количество делителей и все делители.

Пояснение к задаче и алгоритм решения

Пользователь вводит числовой промежуток - минимальное (a) и максимальное (b) числа. После этого запрашивается искомое количество делителей.

Во внешнем цикле перебираются натуральные числа от a до b. При этом в конце каждой итерации a увеличивается на 1, тем самым приближаясь к b.

В теле внешнего цикла вводится счетчик (m) количества делителей очередного натурального числа. Далее во внутреннем цикле перебираются числа (i) от 1 до a. Если i делит нацело a, то счетчик увеличивается на 1.

После этого значение счетчика сравнивается с требуемым количеством делителей. Если у очередного натурального числа не меньше делителей, чем требуется, то оно и количество делителей выводятся на экран. После этого в цикле снова ищутся делители, но теперь уже они просто выводятся на экран.

Исходный код на языке программирования Pascal

var
    a,b,n,m,i: word;
 
begin
    write('Числовой промежуток: ');
    readln(a,b);
    write('Количество делителей не менее... ');
    readln(n);
    while a <= b do begin
        m := 0;
        for i:=1 to a do
            if a mod i = 0 then m := m + 1;
        if m >= n then begin
            write(a,' - ', m,' - ');
            for i:=1 to a do
                if a mod i = 0 then write(i,' ');
            writeln;
        end;
        a := a + 1;
    end;
end.

Пример(ы) выполнения программы на языке Pascal

Числовой промежуток: 21 44
Количество делителей не менее... 5
24 - 8 - 1 2 3 4 6 8 12 24
28 - 6 - 1 2 4 7 14 28
30 - 8 - 1 2 3 5 6 10 15 30
32 - 6 - 1 2 4 8 16 32
36 - 9 - 1 2 3 4 6 9 12 18 36
40 - 8 - 1 2 4 5 8 10 20 40
42 - 8 - 1 2 3 6 7 14 21 42
44 - 6 - 1 2 4 11 22 44

Исходный код на языке программирования C

#include <stdio.h>
main() {
    unsigned int a,b,m,n,i;
    printf("Числовой промежуток: ");
    scanf("%d%d",&a,&b);
    printf("Минимальное количество делителей: ");
    scanf("%d",&n);
    while (a <= b) {
        m = 0;
        for (i=1; i<=a; i++)
            if (a%i == 0) m += 1;
        if (m >= n) {
            printf("%d - %d - ", a, m);
            for (i=1; i<=a; i++)
                if (a%i == 0) printf("%d ", i);
            printf("\n");
        }
        a += 1;
    }
}

Пример(ы) выполнения программы на языке C

Числовой промежуток: 343 434
Минимальное количество делителей: 20
360 - 24 - 1 2 3 4 5 6 8 9 10 12 15 18 20 24 30 36 40 45 60 72 90 120 180 360
420 - 24 - 1 2 3 4 5 6 7 10 12 14 15 20 21 28 30 35 42 60 70 84 105 140 210 420
432 - 20 - 1 2 3 4 6 8 9 12 16 18 24 27 36 48 54 72 108 144 216 432

Исходный код на языке программирования Python

a = int(input("Минимум: "))
b = int(input("Максимум: "))
n = int(input("Минимальное количество делителей: "))
while a <= b:
    m = 0
    for i in range(1,a+1):
        if a%i == 0:
            m += 1
    if m >= n:
        print(a,'-',m,end=' - ')
        for i in range(1,a+1):
            if a%i == 0:
                print(i,end=' ')
        print()
    a += 1

Пример(ы) выполнения программы на языке Python

Минимум: 45
Максимум: 66
Минимальное количество делителей: 7
48 - 10 - 1 2 3 4 6 8 12 16 24 48
54 - 8 - 1 2 3 6 9 18 27 54
56 - 8 - 1 2 4 7 8 14 28 56
60 - 12 - 1 2 3 4 5 6 10 12 15 20 30 60
64 - 7 - 1 2 4 8 16 32 64
66 - 8 - 1 2 3 6 11 22 33 66

Исходный код на языке программирования Basic

input "Минимум: ", a
input "Максимум: ", b
input "Минимальное количество делителей: ", n
while a <= b
        m = 0
        for i=1 to a
                if a%i = 0 then m = m + 1
        next i
        if m >= n then
                print a + " - " + m + " - ";
                for i=1 to a
                        if a%i = 0 then print i + " ";
                next i
                print
        endif
        a = a + 1
endwhile

Пример(ы) выполнения программы на языке Basic

Минимум: 150
Максимум: 177
Минимальное количество делителей: 12
150 - 12 - 1 2 3 5 6 10 15 25 30 50 75 150
156 - 12 - 1 2 3 4 6 12 13 26 39 52 78 156
160 - 12 - 1 2 4 5 8 10 16 20 32 40 80 160
168 - 16 - 1 2 3 4 6 7 8 12 14 21 24 28 42 56 84 168

Тема

Вложенные циклы

Уровень сложности

Средний

Дата публикации