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

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

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

Например, для числа \(20\)    \(S=2+5=7\).

Решение:

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 S(n):
    divisors = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            if is_prime(i):
                divisors.add(i)
            if is_prime(n//i):
                divisors.add(n//i)
    return sum(divisors) if divisors else 0

c = 0
n = 650001

while c < 5:
    s = S(n)
    if s % 10 == 4:
        print(n, s)
        c += 1
    n += 1

Ответ:
650008    2654
650013    2404
650023    59104
650029    38254
650033    6414