Напишите программу, которая перебирает целые числа, большие 2 634 840, в порядке возрастания и ищет среди них числа, представленные в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых содержит в своей записи ровно одну цифру 4.
В ответе запишите первые 5 найденных чисел в порядке возрастания без разделителей.
Решение
Разложение
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def prime_factors(x):
for i in range(2, int(x**0.5) + 1):
if x % i == 0:
return [i] + prime_factors(x // i)
return [x]
c = 0
for x in range(2_634_841, 10**10):
factors = prime_factors(x)
if len(factors) == 2 and all(str(p).count('4') == 1 for p in factors):
print(x)
c += 1
if c == 5:
break
Идём по числам больше порога и раскладываем каждое на простые множители. Нужно ровно два множителя, и в каждом ровно одна цифра 4. Печатаем сами числа — в бланк их записывают подряд, без пробелов.