(Р. Косов) Напишите программу, которая перебирает числа, меньшие \(8~930~000,\) в порядке убывания и находит первые \(5\) чисел, которые можно представить в виде произведения ровно трех различных простых сомножителей, среди которых только один содержит цифру \(3.\) Запишите эти \(5\) чисел в порядке возрастания, справа от каждого числа запишите его простой сомножитель, содержащий цифру \(3.\)
Решение:
Python
from math import isqrt
def factor(n):
divs = []
for i in range(2, isqrt(n) + 1):
while n % i == 0:
divs.append(i)
n //= i
if n > 1:
divs.append(n)
return divs
ans = []
n = 8_930_000
q = 0
while q < 5:
n -= 1
divisors = factor(n)
if len(divisors) == len(set(divisors)) == 3:
d3 = [d for d in divisors if '3' in str(d)]
if len(d3) == 1:
ans.append((n, d3[0]))
q += 1
ans.sort()
for n, d in ans:
print(n, d)
Ответ:
\(8929985 \,\, 1153\)
\(8929991 \,\, 7639\)
\(8929993 \,\, 373\)
\(8929994 \,\, 443\)
\(8929997 \,\, 103\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене