03.07.2025

Программа, которая ищет числа, представленные в виде произведения ровно двух простых множителей, не обязательно различных

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

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

Пример числа:

Число 6651241 можно разложить на 2579 × 2579, и оба этих множителя — простые числа, содержащие ровно одну цифру "2".

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

def f(n):

    a = []

    for k in range(2,int(n**0.5)+1):

        while n%k==0:

            a.append(k)

            n//=k

    if n>1:

        a.append(n)

    return a

  • В цикле для k от 2 до √n: пока число n делится на k, добавляем k в список множителей.

  • После разложения, если n > 1, значит, оно простое и тоже добавляется в список.

Проверяем работу функции

print(f(12)) # вывод [2, 2, 3]

print(f(424)) # вывод [2, 2, 2, 53]

print(f(6889)) # вывод [83, 83]

print(f(17)) # вывод [17]

Решаем задачу

p = 0  # Счётчик найденных чисел

x = 6_651_220 + 1  # Начинаем с числа после 6 651 220

while p != 5:

    y = f(x)

    if len(y) == 2:  # Если ровно два простых множителя

        # Проверяем, что в каждом множителе ровно одна "2"

        if str(y[0]).count('2') == 1 and str(y[1]).count('2') == 1:

            print(x, max(y))  # Выводим число и наибольший множитель

            p += 1

    x += 1  # Переходим к следующему числу

Вывод:

6651241 2579

6651262 3325631

6651286 3325643

6651314 3325657

6651347 289189