Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 17.12.2021
Сообщений: 39

Сортировка по делителям

22.12.2021, 17:40. Показов 15730. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите программу, сортирующую введенные числа по количеству делителей.

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

Формат вывода
Выведите список кортежей: (число, количество делителей, включая 1 и само число), отсортированный сначала по количеству делителей, затем по самим числам по возрастанию.

Пример

Ввод
18
25
8
6
12
0

Вывод
[(25, 3), (6, 4), (8, 4), (12, 6), (18, 6)]

Если можно решите задачу через
Python
1
stdin.readlines()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2021, 17:40
Ответы с готовыми решениями:

Сортировка по делителям
Напишите программу, сортирующую введенные числа по количеству делителей. Формат ввода Вводятся целые неотрицательные числа, пока не...

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

Выбрать по делителям
Задача №112310. Выбрать по делителям Напишите программу, которая выделяет в другой массив все элементы исходного массива, которые...

9
9 / 7 / 4
Регистрация: 26.11.2021
Сообщений: 52
22.12.2021, 17:58
Python
1
2
3
4
5
6
7
8
9
10
*a, = iter(input, '0')
 
res = []
for num in a:
    cnt = 1
    for i in range(1, int(num) // 2 + 1):
        if int(num) % i == 0:
            cnt += 1
    res.append((num, cnt))
print(sorted(res, key=lambda x: (x[1], x[0])))
1
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
22.12.2021, 20:13
Qun, хорошо. но делители можно считать эффективнее.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
23.12.2021, 08:17
Цитата Сообщение от Meli0r Посмотреть сообщение
Если можно решите задачу через stdin.readlines()
- прекрасная формулировка!

Более эффективный подсчет делителей:

Python
1
2
3
4
5
6
7
с,k=1,2
while k*k<=n:
    if n%k==0:
        c+=1
        m=n//k
        if (m!=k):
            c+=1
1
0 / 0 / 0
Регистрация: 22.02.2024
Сообщений: 14
11.04.2024, 20:00
Ожидаемый результат
[(25, 3), (6, 4), (8, 4), (12, 6), (18, 6)]
Вывод
[('25', 3), ('6', 4), ('8', 4), ('12', 6), ('18', 6)]

Как убрать кавычки

Добавлено через 1 минуту
Цитата Сообщение от Qun Посмотреть сообщение
Python
1
2
3
4
5
6
7
8
9
*a, = iter(input, '0')
res = []
for num in a:
    cnt = 1
    for i in range(1, int(num) // 2 + 1):
        if int(num) % i == 0:
            cnt += 1
    res.append((num, cnt))
print(sorted(res, key=lambda x: (x[1], x[0])))

Ожидаемый результат
[(25, 3), (6, 4), (8, 4), (12, 6), (18, 6)]
Вывод
[('25', 3), ('6', 4), ('8', 4), ('12', 6), ('18', 6)]
0
 Аватар для Semen-Semenich
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,291
11.04.2024, 20:23
Цитата Сообщение от Aidar1986 Посмотреть сообщение
Как убрать кавычки
выводить числа а не строки

Добавлено через 53 секунды
Python
1
res.append((int(num), cnt))
0
0 / 0 / 0
Регистрация: 06.06.2019
Сообщений: 20
02.07.2025, 21:58
Приведенные решения зависают на потоке больших чисел:
93297790 46246068 90070270 97519712 26701187 59342546 8152840 787902161...

Взял быстрый алгоритм поиска делителей, привожу проверенное решение:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from functools import lru_cache
import itertools
 
 
@lru_cache(800)
def po(n):  # мой способ поиска делителей
    divs = []  # все делители
    prdivs = []  # простые делители
    nownum = n  # текущее число, увидите его значение в разложении
    isPrime = False  # в случае, если делителей до корня не нашли, isPrime = True
    # разложение на простые множители
    while not isPrime:
        isPrime = True
        for i in itertools.chain([2], range(3, int(nownum ** 0.5) + 1, 2)):
            if nownum % i == 0:
                prdivs.append(i)
                isPrime = False
                nownum //= i
                break
    prdivs.append(nownum)
    for i in range(len(prdivs)):
        for j in range(len(divs)):
            if divs[j] * prdivs[i] not in divs:
                divs.append(divs[j] * prdivs[i])
        if prdivs[i] not in prdivs[0:i]:
            divs.append(prdivs[i])
        divs.append(1)
    k = len(set(divs))  # set() нужен, потому что по непонятной мне причине на степе
    return (int(n), k)
 
 
data = []
while (k := int(input())) != 0:
    data.append(k)
m = []
# print(data)
for dig in data:
    m.append(po(dig))
print(sorted(m, key=lambda x: (x[1], x[0])))
Добавлено через 3 минуты
Здесь совсем не понял откуда куча "левых" переменных, если есть возможность приведите код полностью.
Видел такой пример:
Python
1
2
3
4
5
def po(st):
    divs = lambda n: chain(*((d, n // d) for d in range(1, int(n ** 0.5) + 1) if n % d == 0))
    k = len(list(divs(st)))
    # print((list(divs(st))))
    return (int(st), k)
код рабочий, но тестирующую систему НЕ устроил, не стал разбираться что ей не нравиться.
0
93 / 88 / 17
Регистрация: 05.08.2021
Сообщений: 425
03.07.2025, 07:56
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import math
 
def f(n):
    divisors = []
    for i in range(1, int(math.sqrt(n))+1):
        if not n % i:
            divisors.append(i)
            if i != n // i:
                divisors.append(n // i)
    return len(divisors)
 
 
l = [18, 25, 8, 6, 12]
ll = sorted(l, key=f)
lll = list(map(lambda x: (x, f(x)), ll))
print(lll)
[(25, 3), (8, 4), (6, 4), (18, 6), (12, 6)]
0
 Аватар для andrey_f
883 / 536 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
03.07.2025, 08:26
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
import sys
 
# Читаем числа до нуля
numbers = []
for line in sys.stdin:
    num = int(line.strip())
    if num == 0:
        break
    numbers.append(num)
 
# Функция для подсчета делителей числа
def count_divisors(n):
    count = 0
    for i in range(1, int(n**0.5) + 1):
        if n % i == 0:
            count += 2 if i != n // i else 1
    return count
 
# Создаем список кортежей (число, количество делителей)
result = [(num, count_divisors(num)) for num in numbers]
 
# Сортируем по количеству делителей, затем по числу
result.sort(key=lambda x: (x[1], x[0]))
 
print(result)
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
03.07.2025, 11:58
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
26
def fact(n, res=0, ord=1, d=2):
    while not n&1:
        n >>= 1
        ord += 1
    d = 3
    while d*d <= n:
        tmp = 1
        while n%d == 0:
            tmp += 1
            n //= d
        else:
            ord *= tmp
        d += 2
    ord *= (n>1) + 1
    return ord
 
from random import randint
 
a = [randint(10**8, 10**9) for _ in range(10000)]
 
res = []
for n in a:
    res.append((n, fact(n)))
 
res.sort(key=lambda x: (x[1], x[0]))
print(res)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.07.2025, 11:58
Помогаю со студенческими работами здесь

Задача №112310. Выбрать по делителям
Задача №112310. Выбрать по делителям Напишите программу, которая выделяет в другой массив все элементы исходного массива, которые...

Как сделать макрос, который раскрывает в цикл по всем делителям числа n?
Как сделать макрос, который раскрывает в цикл по всем делителям числа n?

Сортировка выбором, Сортировка простыми вставками, Сортировка пузырьком, Сортировка слиянием, Быстрая сортировка Хоара
Имеется список товаров, хранящихся на базе. Каждая строка этого списка содержит: инвентарный номер товара; количество видов этого товара;...

Сортировка массива каждым из 3 способов (пузырьковая сортировка, сортировка выбором, сортировка вставкой)
1. Напишите программу, которая выполняет следующие функции: • заполнение элементов массива вещественными числами с заданной ...

Сортировка выбором, сортировка вставкой, сортировка заменой, сортировка обменом ("пузырьковая" сортировка)
Создать класс, содержащий массив и реализующий алгоритмы сортировки и бинарного поиска в этом массиве. Класс описать с помощью...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru