EGEsoll - сборник решений задач из ЕГЭ

Задача 8

Напишите программу, которая перебирает целые числа, большие 600 000, в порядке возрастания и ищет среди них такие, среди делителей которых есть хотя бы одно число, оканчивающееся на 7, но не равное 7 и самому числу. Необходимо вывести первые 5 таких чисел, и наименьший делитель, оканчивающийся на 7, не равный 7 и самому числу.

Формат вывода: для каждого из 5 таких найденных чисел в отдельной строке сначала выводится само число, затем — наименьший делитель, оканчивающийся на 7, не равный 7 и самому числу. Строки выводятся в порядке возрастания найденных чисел.

Добавлено: 24.04.26 18:52

Перейти к решению

Решение

Решение на Python:

from math import isqrt

cnt = 0
for x in range(600_001, 2_000_000):
    factors = []
    root = isqrt(x)
    if root * root == x:
        factors.append(root)
    for k in range(2, root):
        if x % k == 0:
            factors.append(k)
            factors.append(x // k)
    if any(str(y)[-1] == "7" for y in factors if y != 7 and y != x):
        cnt += 1
        print(
            x,
            min([y for y in factors if y != 7 and y != x and str(y)[-1] == "7"]),
        )
        if cnt == 5:
            break

Вывод программы и ответ:

600001 437
600002 47
600003 1227
600005 217
600012 16667

Автор - rubygem17

Объяснение

None

Назад