Задание 25. Информатика. 2023-7

Просмотры: 67
Изменено: 22 ноября 2024

Пусть \(M\) — разность максимального и минимального делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(M\) равным нулю.
Напишите программу, которая перебирает целые числа, меньшие \(800~000\), в порядке убывания и ищет среди них такие, для которых значение \(M\) кратно \(17\) (нуль числу \(17\) не кратен). Вывести первые пять найденных чисел и соответствующие им значения \(M\).
Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(M\).
Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(20\) \(M = 10-2=8\).

Решение:

Python


def min_divisor(n):
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1

k = 0
n = 799999

while k < 5:
    md = min_divisor(n)
    if md > 1:
        M = n // md - md
        if M and M % 17 == 0:
            print(n, M)
            k += 1
    n -= 1

Ответ:
\(799995\) \(266662\)
\(799990\) \(399993\)
\(799967\) \(114274\)
\(799956\) \(399976\)
\(799922\) \(399959\)