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

Просмотры: 86
Изменено: 24 ноября 2024

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

Например, для числа \(105\) наибольший натуральный делитель \(35\) не является простым, для числа \(15\) наибольший натуральный делитель \(5\) — простое число, а для числа \(13\) такого делителя не существует.

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    if n == 2 or n == 3:
        return True
    if n > 3:
        for i in range(2, int(n**0.5) + 1):
            if n % i == 0:
                return False
        return True

def max_d_is_prime(n):
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return is_prime(n//i), n, n // i
    return True, n, n

c = 0
n = 350001
while c < 6:
    t = max_d_is_prime(n)
    if not t[0]:
        print(t[1], t[2])
        c += 1
    n += 1

Ответ:
350001    116667
350002    175001
350004    175002
350007    116669
350008    175004
350009    31819