Алгоритм решения задания 14. Часть 1
Учимся решать 15 задания первого типа
Читать
Пусть М — сумма минимального и максимального простых натуральных делителей целого числа, не считая самого числа. Если таких делителей у числа нет, то значение М считается равным нулю.
Напишите программу, которая перебирает целые числа, большие 5 400 000, в порядке возрастания и ищет среди них такие, для которых М больше 60 000 и является палиндромом, т.е. одинаково читается слева направо и справа налево
В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце — соответствующие им значения М.
Например, для числа 298 M = 2 + 149 = 151.
from math import isqrt
def get_divisors(num):
divisors = set()
for i in range(2, isqrt(num) + 1):
if num % i == 0:
divisors |= {i, num // i}
return divisors
def is_palindrome(num):
s = str(num)
return s == s[::-1]
def is_prime(num):
if num < 2:
return False
if num == 2:
return True
if num % 2 == 0:
return False
if num == 3:
return True
if num % 3 == 0:
return False
for div in range(5, isqrt(num) + 1, 6):
if num % div == 0 or num % (div + 2) == 0:
return False
return True
def f(num):
divisors = [div for div in get_divisors(num) if is_prime(div)]
if not divisors:
return 0
M = min(divisors) + max(divisors)
if M > 60_000 and is_palindrome(M):
return M
return 0
cnt = 0
for i in range(5_400_001, 10 ** 20):
if M := f(i):
print(i, M)
cnt += 1
if cnt == 5:
break
