*(Д. Статный) Найдите все натуральные числа, принадлежащие отрезку \([10~000~000; \, 60~000~000],\) у которых количество делителей – простое число. В ответе запишите первые \(7\) чисел с наибольшим количеством делителей, справа от каждого числа запишите количество его делителей. Отсортируйте числа по убыванию количества делителей, а числа с одинаковым количеством делителей – по возрастанию самих чисел.
Решение:
Python
from math import isqrt
def is_prime(n):
if n <= 2:
return 2
if n & 1 == 0:
return False
for x in range(3, isqrt(n) + 1, 2):
if n % x == 0:
return False
return True
primes = [x for x in range(2, 100) if is_prime(x)]
nums = []
for n in primes:
for p in primes:
cand = n ** (p - 1)
if 10**7 <= cand <= 6 * 10**7:
nums.append((p, cand))
nums.sort(key=lambda x: (x[0], -x[1]), reverse=True)
for d, n in nums[:7]:
print(n, d)
Ответ:
\(43046721 \,\, 17\)
\(24137569 \,\, 7\)
\(47045881 \,\, 7\)
\(12117361 \,\, 5\)
\(13845841 \,\, 5\)
\(20151121 \,\, 5\)
\(25411681 \,\, 5\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене