№25 · решено
Произведение двух простых с «16»
Перебирай целые числа > 1 103 285 717. Найди числа-произведения ровно двух простых (не обязательно различных), каждый из которых содержит «16» ровно один раз. Выведи первые 5 и наименьший множитель каждого.
Источник: ФИПИ, № 31519
Ответвпиши то, что вывела программа
Показать разбор
- Напиши p(x), которая проверяет простоту перебором делителей до корня.
- Напиши good(x): число простое и «16» встречается в его записи ровно один раз.
- Напиши f(x): перебирай делители d до корня и добавляй d и x // d в список, если оба хорошие.
- Перебирай числа по возрастанию, начиная со следующего за данным в условии.
- Если в списке ровно два числа, выводи x и min(D). После пятого найденного останавливайся.
def p(x):
return x > 1 and all(x % d != 0 for d in range(2, int(x ** 0.5) + 1))
def good(x):
return str(x).count('16') == 1 and p(x)
def f(x):
D = []
for d in range(2, int(x ** 0.5) + 1):
if x % d == 0:
if good(d) and good(x // d):
D.append(d)
D.append(x // d)
return D
n = 0
for x in range(1103285718, 10 ** 20):
D = f(x)
if len(D) == 2:
print(x, min(D))
n += 1
if n == 5:
break