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

Просмотры: 116
Изменено: 29 октября 2024

Пусть \(M\) — разность максимального и минимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(M\) равным нулю.

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

Например, для числа \(20\)    \(M = 10 - 2 = 8\).

Решение:

Python


def M(n):
    divisors = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n//i)
    if divisors:
        return max(divisors) - min(divisors)
    else:
        return 0

c = 0
i = 800000
while c < 5:
    m = M(i)
    if m and m % 17 == 0:
        print(i, m)
        c += 1
    i -= 1

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