Пусть M – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение M равным нулю.
Напишите программу, которая перебирает целые числа, большие 700 000, в порядке возрастания и ищет среди них такие, для которых M оканчивается на 4. В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце — соответствующие им значения M.
Например, для числа 20 M = 2 + 10 = 12.
Количество строк в таблице для ответа избыточно.
ЕГЭ по информатике Основная волна 08.06.2024 kompege.ru – задание №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(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 таких чисел, прерывает цикл.
