Пусть M – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение M равным нулю.
Напишите программу, которая перебирает целые числа, большие 700 000, в порядке возрастания и ищет среди них такие, для которых M оканчивается на 4. В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце — соответствующие им значения M.
Например, для числа 20 M = 2 + 10 = 12.
Количество строк в таблице для ответа избыточно.
Решение:
|
def m(x): for i in range(2, int(x**0.5)+1): if x % i == 0: return i + x//i return 0 k=0 for i in range(700_001, 1_000_000): if m(i)%10==4: print(i, m(i)) k+=1 if k==5: break |
Ответ:
700004 350004
700009 41194
700023 233344
700024 350014
700044 350024
Объяснение
Функция m(x)
Эта функция вычисляет сумму наименьшего и наибольшего делителей заданного числа x
(исключая 1 и само x
). Если таких делителей нет, функция возвращает 0.
for i in range(2, int(x**0.5)+1):
— Этот цикл перебирает числа от 2 до квадратного корня из x
.
if x % i == 0:
— Проверяет, является ли i
делителем x
.
return i + x//i
— Если i
является делителем, возвращает сумму i
и x//i
.
return 0
— Если делителей не найдено, возвращает 0.
Основной код
Основной код перебирает числа от 700,001 до 999,999 и находит первые 5 чисел, для которых значение m(x)
оканчивается на 4.
k = 0
— Инициализирует счетчик k
для отслеживания количества найденных подходящих чисел.
for i in range(700_001, 1_000_000):
— Перебирает числа от 700,001 до 999,999.
if m(i) % 10 == 4:
— Проверяет, оканчивается ли результат m(i)
на 4.
print(i, m(i))
— Выводит число и соответствующее ему значение m(x)
, если оно соответствует условию.
k += 1
— Увеличивает счетчик k
.
if k == 5:
— Если найдено 5 таких чисел, прерывает цикл.