(А.Богданов) Напишите программу, которая перебирает целые числа, бо́льшие 1 234 582 354, в порядке возрастания и ищет среди них числа, представленные в виде произведения ровно двух простых множителей, не обязательно различных, сумма которых содержит в своей записи ровно три цифры 1.
В ответе в первом столбце таблицы запишите первые 5 найденных чисел в порядке возрастания, а во втором столбце сумму его простых множителей.
Количество строк в таблице для ответа избыточно.
Решение
🔹 Шаг 1. Идея решения
📌
Перебираем числа больше 1234582354 и ищем те, которые раскладываются в произведение 2 простых множителей, и каждый простой множитель содержит ровно 3 цифр(ы) 1 в записи.
Во втором столбце выводим наибольший из множителей.
🔹 Шаг 2. Проверка простоты
def is_prime(n):
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
📌 Функция is_prime используется при разложении на множители.
🔹 Шаг 3. Перебор чисел и вывод ответа
c = 0
for x in range(1_234_582_355, 10**10):
for d in range(2, int(x ** 0.5) + 1):
if x % d == 0 and is_prime(d) and is_prime(x // d):
s = d + x // d
if str(s).count('1') == 3:
print(x, s)
c += 1
break
if c == 5:
break
📌
Если длина списка множителей равна 2, число подходит — выводим его и наибольший множитель.
Останавливаемся после 5 найденных чисел.