Все задачи №25
№25

M > 80 000, простое, «567» ровно раз

M — сумма наименьшего и наибольшего простых делителей числа (не считая его самого; нет делителей — 0). Числа > 8 007 494 154, у которых M > 80 000, M простое и в записи M цифры 567 встречаются ровно один раз. Первые 5 и M.

Источник: ФИПИ, № 31134

Ответвпиши то, что вывела программа
Показать разбор
  1. Напиши razl(x): находит первый делитель и рекурсивно раскладывает остаток. Для простого числа вернётся список из одного элемента.
  2. Перебирай числа по возрастанию, начиная со следующего за данным в условии. Простые пропускай, у них M = 0.
  3. Посчитай M как сумму наибольшего и наименьшего простых делителей.
  4. Проверь, что M больше 80 000, что 567 встречается в записи M ровно один раз и что M простое.
  5. Выводи x и M, после пятого найденного останавливайся.
def p(x):
    return x > 1 and all(x % d != 0 for d in range(2, int(x ** 0.5) + 1))

def razl(x):
    for i in range(2, int(x ** 0.5) + 1):
        if x % i == 0:
            return [i] + razl(x // i)
    return [x]

n = 0
for x in range(8007494155, 10 ** 20):
    r = razl(x)
    if len(r) == 1:
        continue
    s = set(r)
    m = max(s) + min(s)
    if m > 80000 and str(m).count('567') == 1 and p(m):
        print(x, m)
        n += 1
        if n == 5:
            break