Тема 25. Программирование - Обработка целочисленной информации

25.02 Поиск делителей

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела программирование - обработка целочисленной информации
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 1#22669Максимум баллов за задание: 1

Найдите наименьшее натуральное число, которое имеет ровно 20 делителей. В ответе укажите число.

Показать ответ и решение
def f(n):
    count = 0
    for i in range(1, int(n ** 0.5) + 1):
        if n % i == 0:
            count += 1
            if n // i != i:
                count += 1
    if count == 20:
        return True
    return False
i = 0
while not(f(i)):
    i += 1
print(i)

Ответ: 240

Ошибка.
Попробуйте повторить позже

Задача 2#27875Максимум баллов за задание: 1

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

Показать ответ и решение
n = int(input())
res = 0
for i in range(1, int((n)**0.5) + 1):
    if (n % i == 0):
        res += 1
        if (n // i != i):
            res += 1
print(res)

Ответ:

Ошибка.
Попробуйте повторить позже

Задача 3#30190Максимум баллов за задание: 1

Найти количество натуральных делителей у числа 55440.

Показать ответ и решение
def count_div(n):  # Счетчик всех делителей  
    k = 2  # 1 и само число - делители числа всегда  
    for i in range(2, int(n ** 0.5) + 1):  
        if n % i == 0:  
            k += 1  
            if n // i != i:  
                k += 1  
    return k  
 
 
print(count_div(55440))

Ответ: 120

Ошибка.
Попробуйте повторить позже

Задача 4#30191Максимум баллов за задание: 1

Вывести в порядке возрастания все нетривиальные делители числа 49500.

Показать ответ и решение
def dividers(n):  # Отсортированный массив нетривиальных делителей  
    a = []  
    for i in range(2, int(n ** 0.5) + 1):  
        if n % i == 0:  
            a.append(i)  
            if n // i != i:  
                a.append(n// i)  
    a.sort()  
    return a

Ответ: 2 3 4 5 6 9 10 11 12 15 18 20 22 25 30 33 36 44 45 50 55 60 66 75 90 99 100 110 125 132 150 165 180 198 220 225 250 275 300 330 375 396 450 495 500 550 660 750 825 900 990 1100 1125 1375 1500 1650 1980 2250 2475 2750 3300 4125 4500 4950 5500 8250 9900 12375 16500 24750

Ошибка.
Попробуйте повторить позже

Задача 5#38811Максимум баллов за задание: 1

Утверждается, что количество делителей числа X  четно. Найдите количество пар делителей числа X = 2052336  , произведение которых равно исходному числу. При этом пары делителей выбираются следующим образом минимальный делитель * максимальный делитель, предминимальный делитель * предмаксимальный делитель и т.д. В ответе укажите два числа через пробел: сначала количество рассматриваемых пар, затем количеством пар, произведение которых равно исходному числу.

Показать ответ и решение
a = []
x = 2052336
for i in range(1, x + 1):
    if x % i == 0:
        a.append(i)
count = 0
n = len(a)
for i in range(n // 2):
    if a[i] * a[n - i - 1] == x:
        count += 1
print(n // 2, count)

Ответ: 60 60

Ошибка.
Попробуйте повторить позже

Задача 6#38812Максимум баллов за задание: 1

Для X  = 3052336  найдите разность между количеством делителей числа X  , которые больше квадратного корня из     X  и количеством делителей числа X  , которые меньше квадратного корня из X  . В ответе укажите искомую разность.

Показать ответ и решение

Обратим внимание, что если d  - делитель числа X  , то и X ∕∕d  - делитель числа X  . Очевидно, эти два числа находятся по разную сторону от √--
 X  (иначе, предположим, что они оба меньше, тогда X = d∗ X∕∕d < √x-∗√x-< X,  чего явно не может быть, случай, когда оба больше - аналогичен). Таким образом, мы видим, что все делители разбиваются на пары, в которых один делитель меньше корня, а другой - больше. Отсюда понимаем, что делителей, меньших корня столько же, сколько и больших.

print(0)

А теперь представим, что мы не знаем математику, и попробуем решить это другим способом:

x = 3052336
sq = x ** 0.5
more = 0
less = 0
for i in range(1, x + 1):
    if x % i == 0:
        if i > sq:
            more += 1
        if i < sq:
            less += 1
print(more - less)

Ответ: 0

Ошибка.
Попробуйте повторить позже

Задача 7#38813Максимум баллов за задание: 1

Дано число X = 1052336  и массив с числами a = [1,2,98,43,89,739]  . Назовем «подходящими» элементы массива, которые являются делителями числа X  . Найдите сумму чисел, которые в паре с «подходящими» элементами массива дают произведение равное X  .

Показать ответ и решение

a = [1, 2, 98, 43, 89, 739]
x = 1052336
summa = 0
for i in a:
    if x % i == 0:
        summa += x // i
print(summa)

Ответ: 1591752

Ошибка.
Попробуйте повторить позже

Задача 8#38815Максимум баллов за задание: 1

Напишите программу, которая получает на вход число и возвращает количество его делителей. В ответе укажите количество делителей для числа 2004052336  .

Показать ответ и решение

Решение 1

count = 0
x = int(input())
for i in range(1, int(x ** 0.5) + 1):
    if x % i == 0:
        count += 1
        if x // i != i:
            count += 1
print(count)

 

Решение 2

a = set()
x = int(input())
for i in range(1, int(x ** 0.5) + 1):
    if x % i == 0:
        a.add(i)
        a.add(x // i)
print(len(a))

Ответ: 60
Рулетка
Вы можете получить скидку в рулетке!