(А. Богданов) Найдите наименьшее натуральное число, которое имеет ровно \(512\) делителей. В ответе запишите сначала само число и затем его наибольший простой делитель. Подсказка: используйте основную теорему арифметики.
Решение:
Python
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41]
def find_num(divs, prime_idx = 0, last_exp = float('inf')):
"""
функция нахождения минимального числа с заданным количество делителей
:param divs: количество делителей, которое должно иметь число
:param prime_idx: индекс простого числа в списке primes
:param last_exp: степень последнего простого числа, входящего в разложение
:return: возвращает наименьшее число, имеющее заданное количество делителей
"""
if divs == 1: # если количество делителей равно 1,
return 1 # то это число 1, больше делать ничего не надо
min_num = float('inf')
for i in range(1, divs): # проходим по всем возможным делителям числа divs
if divs % (i + 1) == 0: # значит текущее простое число может входить в разложение в степени i
if i <= last_exp: # каждое следующее простое число в разложении
# не может иметь степень выше чем предыдущее
rem = divs // (i + 1)
tmp = find_num(rem, prime_idx + 1, i)
if tmp != float('inf'):
curr = primes[prime_idx] ** i * tmp
min_num = min(min_num, curr)
return min_num
ans = find_num(512)
prime_divs = [primes[idx] for idx in range(len(primes)) if ans % primes[idx] == 0]
print(ans, max(prime_divs))
Ответ: \(17297280 \,\, 13\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене