Как найти число по количеству делителей python

gray621

36 / 51 / 11

Регистрация: 14.01.2021

Сообщений: 406

1

Найти число по количеству делителей

17.01.2021, 19:52. Показов 9344. Ответов 14

Метки python 3, питон (Все метки)


Студворк — интернет-сервис помощи студентам

Формат ввода
Вводится натуральное число – количество делителей, считая единицу и само число.

Формат вывода
Вывести наименьшее число с таким количеством делителей.

Пример 1
Ввод Вывод
8
24
Пример 2
Ввод Вывод
48
2520
Примечания
При решении нельзя использовать функции и методы, а также списки и словари.

Вот код, чтобы найти кол-во делителей числа, а как наоборот?

Python
1
2
3
4
5
6
7
8
9
10
n = int(input())
count_of_dividers = 0
 
for i in range(n - 1, 1, -1):
 
    if n % i == 0:
 
        count_of_dividers += 1
 
print(count_of_dividers)



0



unfindable_404

Эксперт Python

690 / 473 / 204

Регистрация: 22.03.2020

Сообщений: 1,052

17.01.2021, 20:32

2

На основе вашего кода:

Python
1
2
3
4
5
6
7
8
9
10
11
divs = int(input())
n = 1
while True:
    count_of_dividers = 0
    for i in range(n, 0, -1):
        if n % i == 0:
            count_of_dividers += 1
    if count_of_dividers == divs:
        print(n)
        break
    n += 1



1



Эксперт Python

7256 / 4045 / 1780

Регистрация: 27.03.2020

Сообщений: 6,871

17.01.2021, 20:42

3

gray621, подсказка — количество делителей :
https://www.cyberforum.ru/cgi-bin/latex.cgi?prod_{}^{}({{p}_{i}}^{} + 1)
Где https://www.cyberforum.ru/cgi-bin/latex.cgi?{p}_{i} — степень простого i-го множителя в составе исходного числа
24 -> 2*2*2*3 -> https://www.cyberforum.ru/cgi-bin/latex.cgi?{2}^{3} * {3}^{1}
Итого множителей = (3+1) * (1+1) = 8



1



gray621

36 / 51 / 11

Регистрация: 14.01.2021

Сообщений: 406

17.01.2021, 20:52

 [ТС]

4

Цитата
Сообщение от unfindable_404
Посмотреть сообщение

divs = int(input())
n = 1
while True:
    count_of_dividers = 0
    for i in range(n, 0, -1):
        if n % i == 0:
            count_of_dividers += 1
    if count_of_dividers == divs:
        print(n)
        break
    n += 1

Спасибо, у меня не получалось придумать ещё n, а так всё такое же.

Добавлено через 5 минут

Python
1
2
3
4
5
6
7
8
9
10
11
divs = int(input())
n = 1
while True:
    count_of_dividers = 0
    for i in range(n, 0, -1):
        if n % i == 0:
            count_of_dividers += 1
    if count_of_dividers == divs:
        print(n)
        break
    n += 1

Код не работает на 18 тесте, превышен лимит времени, можно как-то ускорить цикл?



0



Эксперт Python

7256 / 4045 / 1780

Регистрация: 27.03.2020

Сообщений: 6,871

17.01.2021, 21:06

5

gray621, ограничения на «n» есть ?



0



36 / 51 / 11

Регистрация: 14.01.2021

Сообщений: 406

17.01.2021, 21:23

 [ТС]

6

Цитата
Сообщение от Gdez
Посмотреть сообщение

ограничения на «n» есть ?

Нет, но есть ограничение на время 1 секунда, а тест идёт 1064 ms, то есть нужно ускорить цикл немножко.

Добавлено через 15 минут
Я думаю можно уменьшить время пополам если уменьшить в range number пополам, т.к. делителей больше половины числа нет. Как это реализовать если в range int?



0



3483 / 2090 / 560

Регистрация: 02.09.2015

Сообщений: 5,335

17.01.2021, 21:35

7

Нарыл решение

Но оно не удовлетворяет условию:

Цитата
Сообщение от gray621
Посмотреть сообщение

При решении нельзя использовать функции и методы, а также списки и словари.

В т. ч. мемоизация.



0



Gdez

Эксперт Python

7256 / 4045 / 1780

Регистрация: 27.03.2020

Сообщений: 6,871

17.01.2021, 22:08

8

Лучший ответ Сообщение было отмечено gray621 как решение

Решение

gray621, если не ошибся

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
divs = int(input())
if divs % 2 :
    n = 1
    while True:
        if int(n**0.5) == n**0.5 :
            count_of_dividers = 1
            for i in range(1, int(n**0.5)):
                if n % i == 0:
                    count_of_dividers += 2
            if count_of_dividers == divs:
                print(n)
                break
        n += 1
else :
    n = divs
    while True:
        if int(n**0.5) != n**0.5 :
            count_of_dividers = 0
            for i in range(1, int(n**0.5) + 1) :
                if n % i == 0 :
                    count_of_dividers += 2
            if count_of_dividers == divs:
                print(n)
                break
        n += 2

Добавлено через 7 минут
Arsegg, на кодфорсе как то набрел на задачку по делителям. Вроде решил — тесты все прошла. Но позже сам нашел при каких N неверно считает мой код. Там через плюсики с реккурсией решили.
Если интересует, то возможно найду задачу на кодфорс. А тут я выкладывал тему :
Разложение на множители



1



Arsegg

17.01.2021, 22:34

Не по теме:

Цитата
Сообщение от Gdez
Посмотреть сообщение

Если интересует, то возможно найду задачу на кодфорс.

Полагаю, задача div1. :D



0



gray621

36 / 51 / 11

Регистрация: 14.01.2021

Сообщений: 406

17.01.2021, 22:49

 [ТС]

10

Цитата
Сообщение от Gdez
Посмотреть сообщение

divs = int(input())
if divs % 2 :
    n = 1
    while True:
        if int(n**0.5) == n**0.5 :
            count_of_dividers = 1
            for i in range(1, int(n**0.5)):
                if n % i == 0:
                    count_of_dividers += 2
            if count_of_dividers == divs:
                print(n)
                break
        n += 1
else :
    n = divs
    while True:
        if int(n**0.5) != n**0.5 :
            count_of_dividers = 0
            for i in range(1, int(n**0.5) + 1) :
                if n % i == 0 :
                    count_of_dividers += 2
            if count_of_dividers == divs:
                print(n)
                break
        n += 2

А почему там n в корень возводится, а не пополам делится?

Добавлено через 5 минут
Зачем проверка

Python
1
if int(number ** 0.5) == number ** 0.5

?



0



Эксперт Python

7256 / 4045 / 1780

Регистрация: 27.03.2020

Сообщений: 6,871

17.01.2021, 23:11

11

Arsegg,

Добавлено через 5 минут
gray621,

А почему там n в корень возводится, а не пополам делится?

Потому что это не слагаемые, а делители. Допустим для 40 не нужно искать делители больше 6, сразу считать парами — 1 и 40, 2 и 20, 4 и 10, 5 и 8; всего 8 делителей.
Первый while перебирает квадраты чисел — у них нечетное число делителей.
Поэтому и проверка (это ответ на второй вопрос) — если число не квадрат другого числа, то количество делителей четное

Добавлено через 5 минут
gray621, Кроме 1, остальные минимальные числа с заданным количеством делителей — четные. Поэтому, если N > 1, то счетчик можно с шагом 2 по четным числам



2



36 / 51 / 11

Регистрация: 14.01.2021

Сообщений: 406

17.01.2021, 23:25

 [ТС]

12

Цитата
Сообщение от Gdez
Посмотреть сообщение

если число не квадрат другого числа, то количество делителей четное

То есть у квадратов чисел корни натуральные числа?



0



Эксперт Python

7256 / 4045 / 1780

Регистрация: 27.03.2020

Сообщений: 6,871

17.01.2021, 23:41

13

gray621, нет
4 -> 1, 2, 4
9 -> 1, 3, 9
16 -> 1, 2, 4, 8 16
и тд
Допустим 36 -> (1 и 36) + (2 и 18) + (3 и 12) + (4 и 9) + (6 и 6)… Но 6 и 6 это одно число. Итого четыре пары делителей плюс один делитель (для 36 это 6). Это для всех чисел, которые квадраты какого то натурального делителя.

Добавлено через 2 минуты
А вообще, задача без функций и списков некорректна. Когда найдешь код, который пройдет все тесты, попробуй число, допустим, 59 или 77



0



gray621

36 / 51 / 11

Регистрация: 14.01.2021

Сообщений: 406

18.01.2021, 00:14

 [ТС]

14

Цитата
Сообщение от Gdez
Посмотреть сообщение

Когда найдешь код, который пройдет все тесты

Твой код прошёл

Добавлено через 15 секунд

Цитата
Сообщение от Gdez
Посмотреть сообщение

Когда найдешь код, который пройдет все тесты

Твой код прошёл

Добавлено через 10 секунд

Цитата
Сообщение от Gdez
Посмотреть сообщение

Когда найдешь код, который пройдет все тесты

Твой код прошёл

Добавлено через 22 минуты
Зачем проверка для чётного кол-во делителей

Python
1
if int(number ** 0.5) != number ** 0.5:

И ещё почему в range + 1?

Python
1
range(1, int(number ** 0.5) + 1):



0



Gdez

Эксперт Python

7256 / 4045 / 1780

Регистрация: 27.03.2020

Сообщений: 6,871

18.01.2021, 04:38

15

gray621,

Зачем проверка для чётного кол-во делителей

Потому что для четных диапазон :

Python
1
range(1, int(number ** 0.5) + 1):

Для нечетных изначально можно не включать значение корня (для 36 число 6 уже входит -> count_of_dividers = 1)
Для четных нужно включать => допустим 42 -> его «целый» корень = 6 и для 6 парный делитель 7.
Если убрать проверку (что число не квадрат другого числа), то для N = 10 выведет ответ -> 36 -> посчитает пару (6 и 6)



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

18.01.2021, 04:38

Помогаю со студенческими работами здесь

Дано число P, нужно найти число от 1 до Р, с наибольшим количеством делителей
написал проггу, что не правильно уже 3 часа бьюсь…

int p;
int max=0,a = 0;

Дано натуральное число N. Найти число от 1 до N с максимальной суммою делителей
Дано натуральное число N. Найти число от 1 до N с максимальной суммой делителей.

Формат входных…

Дано натуральное число n. Найти число от 1 до n, имеющий как можно большее сумму делителей
Дано натуральное число n. Найти число от 1 до n, имеющий как можно большее сумму делителей.
Решать…

. Найти число всех натуральных делителей числа , которые не превосходят это число и взаимно простых с ним: а) 720, б) 3179, в) 6615
. Найти число всех натуральных делителей числа , которые не превосходят это число и взаимно…

Перестановка элементов массива по количеству делителей
Задание такое: Заполните массив случайными числами в интервале (100,999) и переставьте их по…

Расставьте данный массив натуральных чисел по количеству их делителей
Расставьте данный массив натуральных чисел по количеству их делителей.

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

15

I’m trying to create a function that returns the integer with most divisors when provided with a list.

def number_of_divisors(k):
    count = 0
    for number in range(1, k+1):
        if k % number == 0:
            count += 1
    return count

def max_divisors(list_i):
    return(max(list_i, key = number_of_divisors))

This function works perfectly fine. But if provided with a list like [8,12,18,6], 12 and 18 are tied for maximum number of divisors. It only returns the first item with maximum number of divisors i.e. 12. I want it to return 18 as well. How to achieve this?

DevLounge's user avatar

DevLounge

8,2833 gold badges30 silver badges44 bronze badges

asked Mar 24, 2017 at 19:15

K. Grewal's user avatar

2

You are going to have to collect all the results, and you can use a dictionary to map the number of divisors to the numbers and just return that list of numbers, e.g.:

def max_divisors(list_i):
    d = {}
    for n in list_i:
        d.setdefault(number_of_divisors(n), []).append(n)

    return d[max(d)]

>>> max_divisors([8,12,18,6])
[12, 18]

answered Mar 24, 2017 at 19:25

AChampion's user avatar

AChampionAChampion

29.4k3 gold badges58 silver badges73 bronze badges

2

You could rewrite your max_divisors function like this:

def max_divisors(items):
    div_list = list(map(number_of_divisors, items))
    most = max(div_list)
    return [items[i] for i, div in enumerate(div_list) if div == most]

The first line generates a list of divisors corresponding to your items, so that div_list[i] is equal to the number of divisors of the number at items[i]. The second line finds the maximum number of divisors, and the third line marches through your divisors list and adds the corresponding number to the return list only if it has the maximum number of divisors.

The third line contains an example of a Python list comprehension; since you’re a beginner you may not have seen one of these before. Its general form is

[item for item in sequence if cond]

an expression which is equivalent to filtered in the more verbose code below

filtered = []
for item in sequence:
    if cond:
        filtered.append(item)

Note that both the item and cond field in the list comprehension can be any Python expression.

answered Mar 24, 2017 at 19:29

iafisher's user avatar

iafisheriafisher

9287 silver badges14 bronze badges

1

На чтение 6 мин Просмотров 2.1к. Опубликовано

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

Содержание

  1. Что такое делители числа
  2. Нахождение количества делителей числа с помощью цикла и проверки на остаток от деления
  3. Нахождение количества делителей числа с помощью математических свойств чисел
  4. Используем свойство: Если число n имеет делитель d, то оно также имеет делитель n/d
  5. Используем разложение на простые множители

Что такое делители числа

В математике делителем натурального числа называют все числа, на которые это число делится без остатка. Например, делителями числа 12 являются числа 1, 2, 3, 4, 6 и 12, так как 12 делится на каждое из этих чисел без остатка. Количество делителей числа может быть разным в зависимости от самого числа. Например, у числа 12 имеется 6 делителей, а у числа 17 только 2 делителя (1 и само число).

Нахождение количества делителей числа с помощью цикла и проверки на остаток от деления

Для нахождения количества делителей числа можно использовать цикл и проверку на остаток от деления. Идея заключается в том, что мы перебираем все числа от 1 до самого числа и проверяем, делится ли число на каждое из этих чисел без остатка. Если да, то это число является делителем и мы увеличиваем счетчик делителей на 1.

Вот пример кода на Python, который иллюстрирует этот подход:

num = int(input("Введите число: "))
count = 0

for i in range(1, num+1):
    if num % i == 0:
        count += 1

print("Количество делителей числа", num, "равно", count)

В этом примере мы сначала запрашиваем у пользователя число, затем проходим по всем целым числам от 1 до введенного числа (включительно) с помощью цикла for. Для каждого числа в этом диапазоне мы проверяем, является ли оно делителем введенного числа (то есть, делится ли число нацело на i). Если да, то увеличиваем счетчик делителей на 1. В конце выводим количество найденных делителей на экран.

Такой подход работает для любых чисел, включая большие числа. Однако, при больших числах он может работать медленно, поскольку требует перебора всех чисел от 1 до n. Далее мы рассмотрим более эффективные способы нахождения количества делителей числа.

Нахождение количества делителей числа с помощью математических свойств чисел

Используем свойство: Если число n имеет делитель d, то оно также имеет делитель n/d

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

Таким образом, для нахождения всех делителей числа n, мы можем использовать цикл от 1 до int(sqrt(n))+1, и проверять, является ли i делителем n, если да, то добавлять i и n/i в список делителей.

Например, для числа n=100, квадратный корень из него равен 10. Поэтому, достаточно проверить делители от 1 до 11 (включая 10). Если делитель найден, то мы можем добавить его и соответствующий делитель, найденный путем деления n на найденный делитель, в список делителей. Таким образом, делители числа 100 будут: [1, 2, 4, 5, 10, 20, 25, 50, 100].

Вот пример кода на Python, который использует данный подход

import math

def count_divisors(num):
    # Инициализация счетчика делителей
    div_count = 0

    # Находим квадратный корень из числа
    sqrt_num = int(math.sqrt(num))

    # Проверяем числа от 1 до квадратного корня num
    for i in range(1, sqrt_num + 1):
        if num % i == 0:
            # Если i является делителем, увеличиваем счетчик на 1
            div_count += 1

            # Проверяем, является ли num/i также делителем (чтобы избежать дублирования)
            if i != num // i:
                div_count += 1

    # Возвращаем общее количество делителей
    return div_count

Эта функция принимает один аргумент num, который является целым числом. Она использует функцию sqrt() из модуля math, чтобы найти квадратный корень из числа, и затем проверяет все числа от 1 до этого корня на предмет деления на num. Если число делится без остатка, оно добавляется к счетчику делителей div_count. Затем функция проверяет, является ли num делителем num/i, чтобы избежать дублирования. Наконец, функция возвращает общее количество делителей.

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

Используем разложение на простые множители

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

Действительно, пусть дано число n = p_1^k_1 * p_2^k_2 * … * p_m^k_m, где p_1, p_2, …, p_m — простые числа, а k_1, k_2, …, k_m — их степени. Тогда каждый делитель числа n можно представить в виде d = p_1^i_1 * p_2^i_2 * … * p_m^i_m, где 0 <= i_j <= k_j для всех j от 1 до m. Таким образом, общее количество делителей числа n равно произведению (k_1 + 1) * (k_2 + 1) * … * (k_m + 1).

Для примера, давайте рассмотрим число 24. Его разложение на простые множители выглядит так: 24 = 2^3 * 3^1. Тогда количество делителей числа 24 равно (3 + 1) * (1 + 1) = 8. Это означает, что у числа 24 есть 8 делителей, а именно: 1, 2, 3, 4, 6, 8, 12 и 24.

Для вычисления количества делителей числа с помощью его разложения на простые множители в Python, нам необходимо воспользоваться функцией factorize() из библиотеки sympy. Она разлагает число на простые множители и возвращает список кортежей, каждый из которых содержит простой множитель и его степень. Затем мы можем вычислить количество делителей по формуле, описанной выше, и вернуть результат.

Вот пример кода, использующий функцию factorize() из библиотеки sympy для нахождения количества делителей числа:

from sympy import factorint

def count_divisors(n):
    factors = factorint(n)
    count = 1
    for factor in factors.values():
        count *= (factor + 1)
    return count

n = 24
print(f"Количество делителей числа {n}: {count_divisors(n)}")

Здесь мы сначала импортируем функцию factorint() из библиотеки sympy. Затем определяем функцию count_divisors(), которая принимает на вход число n и возвращает количество его делителей. Внутри функции мы используем функцию factorint() для разложения числа на простые множители и получаем словарь, где ключами являются простые множители, а значениями — их степени. Далее мы вычисляем количество делителей числа с помощью формулы, основанной на свойствах простых множителей, и возвращаем результат.

Затем мы просто вызываем функцию count_divisors() для числа 24 и выводим результат на экран. В данном случае результат будет равен 8, что соответствует количеству делителей числа 24 (1, 2, 3, 4, 6, 8, 12 и 24).

День!
решая задачу пришлось найти в сети алгоритм поиска всех делителей числа.
ну то есть для восьми надо выдать [1,2,4,8], а не [2,2,2] — список делителей. Я переписал этот алгоритм наново, прошу «старших товарищей» подсказать как улучшить. Если есть время ))

def divisorss(n):
    from collections import Counter
    ls = get_ls(n)                  # for n=1568 -> ls = [2, 2, 2, 2, 2, 7, 7]
    pairs = dict(Counter(ls))       #  {2: 5, 7: 2}
    from itertools import product, starmap
    from operator import mul
    from functools import reduce
    #  список всех различных делитей числа
    bases = [b for b in pairs.keys()]   # [2, 7]
    #  список степеней, в которые возводятся уникальные делители для получения числа  
    powers = [[i for i in range(k+1)] for k in pairs.values()]
    # генерирование всех наборов для получения делителей исходного числа
    multi = product(*powers)
    #  сцепка списка оснований с возможными вариантами степеней
    wrk = (zip(bases,power) for power in multi)
    # наборы чисел, которые нужно перемножить для получения делителя
    rezzz = (starmap( pow, row) for row in wrk)
    # возвращение списка всех делителей
    return [reduce(mul,i) for i in rezzz]

например divisorss(1568) возвращает [1, 7, 49, 2, 14, 98, 4, 28, 196, 8, 56, 392, 16, 112, 784, 32, 224, 1568]

Функция get_ls(n) дает соответственно список разложения числа на произведение делителей

например такая:

def get_ls(n):
    """Разложить число на множители"""
    #result = [1]
    result = []
    i = 2
    while i*i <= n:
        if n % i == 0:
            n //= i
            result.append(i)
        else:
            i += 1
    if n > 1:
        result.append(n)
    return result

что можно улучшить?
Ну например, что лучше — reduce из functools или accumulate из itertools. Ну и вообще по алгоритму.

Понятно, что улучшения типа

return [reduce(mul,i) for i in (starmap(pow, row) for row in (zip(bases,power) for power in product(*powers)))] 

не интересны.

Делитель — это число, на которое нацело делится делимое. У делимого может быть один или несколько делителей, найти их все можно с помощью простого алгоритма, который без проблем реализуется на Python 3.

Нахождение делителей числа

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

Каждая подзадача так или иначе связана с предыдущей, поэтому код последующей программы — это немного модернизированный код предыдущей. Кроме того, весь функционал при необходимости можно объединить в одной программе.

Алгоритм нахождения очень простой. В цикле перебираются значения от делимого минус единица до двух включительно. Если делимое нацело делится на текущее значение, то оно является делителем.

Пользователь вводит целое число, делителей которого будет искать программа, тогда код выглядит так:

numb = int(input("Введите целое число: "))
print("Результат:", end = " ")
for i in range(numb - 1, 1, -1):
    if (numb % i == 0):
        print(i, end = " ")

Например, пользователь ввёл число 625. Программа начинает цикл со значения 624, в цикле проверяется, делится ли нацело 625 на 624, затем цикл переходит на следующую итерацию и работает уже с числом 623 и так до двух. Таким образом, вывод программы будет следующим:

Введите целое число: 625
Результат: 125 25 5

Простые делители числа

Простой делитель — это делитель, который делится только на единицу и самого себя. Для нахождения простых делителей с помощью Python нужно немного модернизировать программу, добавив в неё дополнительный цикл for и переменную счётчик.

Программа построена по следующему алгоритму:

  1. Обнулить счётчик.
  2. В цикле искать делители.
  3. Если найден, искать во вложенном цикле его делители. Это для того, чтобы определить: является ли он простым.
  4. Если найден, увеличить счётчик.
  5. Если счётчик равен нулю, то число простое и надо вывести значение делителя в консоль.
  6. Перейти на следующую итерацию внешнего цикла.

Цикл теперь выглядит так:

numb = int(input("Введите целое число: "))
print("Простые:", end = " ")
for i in range(numb - 1, 1, -1):
    is_simple = 0 # Счётчик
    if (numb % i == 0):
        for j in range(i - 1, 1, -1):
            if (i % j == 0):
                is_simple = is_simple + 1 # Увеличиваем, если находим делитель
        if (is_simple == 0): # Если делителей не было найдено, выводим
            print(i, end = " ")

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

Результат работы программы:

Введите целое число: 63
Простые: 7 3

Делители расположены в порядке убывания. И если надо вывести только самый большой простой делитель с помощью Python, то можно после того, как выведется первое число, воспользоваться оператором break для выхода из цикла.

Сумма делителей

Для того чтобы найти сумму всех делителей числа с помощью Python, достаточно добавить в начальную программу переменную, к которой в цикле будет прибавляться каждый найденный делитель.

Код программы:

numb = int(input("Введите целое число: "))
sum_of_dividers = 0
for i in range(numb - 1, 1, -1):
    if (numb % i == 0):
        sum_of_dividers += i
print("Сумма:", sum_of_dividers)

Результат выполнения кода:

Введите целое число: 63
Сумма: 40

Количество делителей

Этот вариант программы также лишь незначительно отличается от изначального. Для подсчёта делителей нужно ввести переменную-счётчик, к которой будет прибавляться единица каждый раз, когда условие «numb % i == 0» будет выполняться.

numb = int(input("Введите целое число: "))
count_of_dividers = 0
for i in range(numb - 1, 1, -1):
    if (numb % i == 0):
        count_of_dividers += 1
print("Количество равно:", count_of_dividers)

Результаты выполнения программы:

Введите целое число: 63
Количество равно: 4

Максимальный и минимальный делитель

Для нахождения минимального и максимального делителя в код на Python нужно добавить две переменные: min_divider и max_divider. В цикле делитель будет сравниваться со значением этих переменных и, если необходимо, записываться в них.

Код программы:

numb = int(input("Введите целое число: "))
min_divider = numb
max_divider = 1
for i in range(numb - 1, 1, -1):
    if (numb % i == 0):
        if (min_divider > i):
            min_divider = i
        if (max_divider < i):
            max_divider = i
print("Минимальный равен:", min_divider)
print("Максимальный равен:", max_divider)

Результат выполнения:

Введите целое число: 63
Минимальный равен: 3
Максимальный равен: 21

Нахождение наименьшего и наибольшего делителя, подсчёт суммы делителей и их количества можно объединить в одну программу на Python. Это не должно вызвать каких-либо проблем или конфликтов, потому что программа работает с 4 независимыми переменными.

Понравилась статья? Поделить с друзьями:
  • Как найти свою фамилию в excel
  • Как в ворде найти центр страницы
  • Как найти адрес ооо по названию
  • Как найти направление движения в физике
  • Трапеция как найти угол abd