Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как среди чисел, данных в блокноте, найти, те у которых определенное количество делителей(в Python)

Артём Зинов Знаток (380), закрыт 1 год назад
например: даны числа и среди них нужно найти те у которых 12 делителей
Лучший ответ
Папа Высший разум (137675) 1 год назад
Должен сказать, что оба приведённых выше алгоритма являются хорошей иллюстрацией поговорки: "не умеешь - не берись".
 def divcount(n):
factors = {1}
p, inc = 2, 1
while p * p <= n:
while n % p == 0:
factors.update([f * p for f in factors])
n //= p
p, inc = p + inc, 2
if n > 1:
factors.update([f * n for f in factors])
return len(factors)

dc = int(input())
ns = (int(s) for s in input().split())
print(*(n for n in ns if divcount(n) == dc))
Остальные ответы
Молот Шотландцев Высший разум (301056) 1 год назад
Ну, 12 делителей для Питончика скорее всего слишком наглый запрос, долго будет размышлять над этим без подключения какой-нибудь библиотеки.
Если диапазон и количество делителей поменьше, например 100 и 3 (а не весьма спорные 12), то как-то так
 def f(x):  
return [x / i for i in range(1, x - 1) if x / i == int(x / i)]

n = int(input('n'))
m = [f(i) for i in range(1, n + 1)]
print(m)
print(*[i + 1 for i in range(len(m)) if len(m[i]) == 3])
Получим 6 8 10 14 15 21 22 26 27 33 34 35 38 39 46 51 55 57 58 62 65 69 74 77 82 85 86 87 91 93 94 95
АндрейВысший разум (450508) 1 год назад
Числа 60 и 72 имеют ровно 12 делителей.
ПапаВысший разум (137675) 1 год назад
Есть алгоритм поиска простых делителей и комбинирования их, он работает намного быстрее. Хотя, у автора "в блокноте" вряд ли стозначные числа, на которых разница была бы заметной...
Посада Ядерная Гуру (4769) 1 год назад
 n = int(input('n: ')) 
num_divisors = 12 # заданное количество делителей

# создаем список чисел от 1 до n
numbers = list(range(1, n+1))

# ищем числа с num_divisors делителями
result = [num for num in numbers if sum(num % i == 0 for i in range(1, num+1)) == num_divisors]

# выводим результат
print(f"Числа с {num_divisors} делителями: {result}")
Похожие вопросы