Тип 25 № 69933 
Обработка целочисленной информации. Нахождение делителей
i
Пусть M — сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то значение M считается равным нулю.
Напишите программу, которая перебирает целые числа, бо́льшие 700 000, в порядке возрастания и ищет среди них такие, для которых значение M оканчивается на 4. Выведите первые пять найденных чисел и соответствующие им значения M.
Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем — значение М.
Строки выводятся в порядке возрастания найденных чисел.
Количество строк в таблице для ответа избыточно.
Решение. Приведём решение на языке Python.
def deliteli(n):
deliteli = []
for i in range(2, int(n**0.5)+1):
if n % i == 0:
deliteli.append(i)
deliteli.append(n//i)
return deliteli
count = 0
for j in range(700_000, 10**6):
d = deliteli(j)
if len(d) != 0:
M = max(d) + min(d)
if M % 10 == 4:
print(j, M)
count += 1
if count == 5:
break
В результате работы программа должна вывести следующее:
700004 350004
700009 41194
700023 233344
700024 350014
700044 350024
Приведём решение Юрия Красильникова на языке Python.
def delit(n):
d = set()
k = 2
while k**2 <= n:
if n%k == 0:
d |= {k,n//k}
k += 1
return sorted(d)
n,k = 700000,0
while k < 5:
n += 1
d = delit(n)
if d:
m = min(d)+max(d)
if m%10 == 4:
k += 1
print(n,m)
Ответ: 700004&350004&700009&41194&700023&233344&700024&350014&700044&350024
69933
700004 350004 700009 41194 700023 233344 700024 350014 700044 350024