Задание 25. Информатика. 2022-16
- Просмотры: 63
- Изменено: 23 ноября 2024
Пусть \(S\) — сумма различных натуральных делителей целого числа, являющихся простыми числами, не считая самого числа.
Напишите программу, которая перебирает целые числа, большие \( 550~000\), в порядке возрастания и ищет среди них такие, для которых значение \(S\) оканчивается на цифру \(7\). Программа должна найти и вывести первые \(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 = 550001
while c < 5:
s = S(n)
if s % 10 == 7:
print(n, s)
c += 1
n += 1
Ответ:
550018 2337
550059 1197
550087 257
550099 1217
550137 117