ЕГЭ, ОГЭ, программирование и робототехника в Калининграде

№ 25018. Основная волна

Напишите программу, которая перебирает целые числа, большие 6 651 220, в порядке возрастания и ищет среди них числа, представленные в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых содержит в своей записи ровно одну цифру 2.

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

from math import isqrt


def contains_2(num):
    return str(num).count('2') == 1


def is_prime(num):
    if num < 2:
        return False
    if num == 2:
        return True
    if num % 2 == 0:
        return False
    if num == 3:
        return True
    if num % 3 == 0:
        return False
    for div in range(5, isqrt(num) + 1, 6):
        if num % div == 0 or num % (div + 2) == 0:
            return False
    return True


def f(num):
    for i in range(2, isqrt(num) + 1):
        if num % i == 0:
            j = num // i
            if contains_2(i) and contains_2(j) and is_prime(i) and is_prime(j):
                return max(i, j)
    return 0


cnt = 0
for i in range(6_651_221, 10 ** 20):
    if M := f(i):
        print(i, M)
        cnt += 1
        if cnt == 5:
            break
Разберём это задание на бесплатном пробном занятии

Преподаватель покажет, как решать такие задачи, и подскажет, с чего начать подготовку. Группы до 8 человек, очно в Калининграде и онлайн.

Записаться на пробное занятие