Пусть M — сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение M равным нулю.
Напишите программу, которая перебирает целые числа, бо́льшие 800 000, в порядке возрастания и ищет среди них такие, для которых M оканчивается на 4. В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце — соответствующие им значения M.
Например, для числа 20 М = 2 + 10 = 12.
Количество строк в таблице для ответа избыточно.
Ответ:
Приведём решение на языке 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(800_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
Ответ:
800004 400004
800009 114294
800013 266674
800024 400014
800033 61554
Приведём решение Александра Козлова на языке Python.
def get_M(n):
mi = ma = None
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
if mi is None: mi = i
if ma is None or (n // i) > ma: ma = n // i
return 0 if mi is None else mi + ma
results = []
for n in range(800_001, 1_000_000):
M = get_M(n)
if M % 10 == 4:
results.append((n, M))
if len(results) == 5: break
for num, M in results:
print(f"{num}\t{M}")

