Пусть M – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение M равным нулю.
Напишите программу, которая перебирает целые числа, бо́льшие 800 000, в порядке возрастания и ищет среди них такие, для которых M оканчивается на 4. В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце – соответствующие им значения M.
Например, для числа 20 М = 2 + 10 = 12.
Количество строк в таблице для ответа избыточно
Демонстрационный вариант ЕГЭ 2025 г. – задание №25
Решение:
|
1 2 3 4 5 6 7 8 9 10 11 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(800_001, 1_000_000): if m(i)%10==4: print(i, m(i)) k+=1 if k==5: break |
Ответ:
800004 400004
800009 114294
800013 266674
800024 400014
800033 61554
Объяснение кода:
- Определение функции
m(x):
12345def m(x):for i in range(2, int(x**0.5)+1):if x % i == 0:return i + x // ireturn 0
Функцияm(x)находит сумму минимального и максимального делителей числаx(кроме 1 и самого числа):- Перебираем делители
iот 2 до квадратного корня изx. - Если
xделится наiбез остатка, возвращаем суммуiиx // i. - Если делителей не найдено, возвращаем 0.
- Перебираем делители
- Перебор чисел и поиск подходящих значений:
1234567k = 0for i in range(800_001, 1_000_000):if m(i) % 10 == 4:print(i, m(i))k += 1if k == 5:break
Перебираем числа от 800 001 до 999 999 и ищем такие, для которых значениеm(i)оканчивается на 4:- Если
m(i) % 10 == 4, выводим числоiи значениеm(i), увеличиваем счетчикk. - Если найдено 5 таких чисел (
k == 5), прекращаем цикл.
- Если
Итог:
Этот код решает задачу нахождения первых пяти чисел, больших 800 000, для которых сумма минимального и максимального делителей (кроме 1 и самого числа) оканчивается на 4. Функция m находит соответствующую сумму делителей, а основной цикл перебирает числа и выводит результаты.
