Пусть M — сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то значение M считается равным нулю.
Напишите программу, которая перебирает целые числа, большие 800 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(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):
| def m(x): for i in range(2, int(x**0.5)+1): if x % i == 0: return i + x // i return 0 |
Функция m(x) находит сумму минимального и максимального делителей числа x (кроме 1 и самого числа):- Перебираем делители
i от 2 до квадратного корня из x. - Если
x делится на i без остатка, возвращаем сумму i и x // i. - Если делителей не найдено, возвращаем 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 |
Перебираем числа от 800 001 до 999 999 и ищем такие, для которых значение m(i) оканчивается на 4:- Если
m(i) % 10 == 4, выводим число i и значение m(i), увеличиваем счетчик k. - Если найдено 5 таких чисел (
k == 5), прекращаем цикл.
Итог:
Этот код решает задачу нахождения первых пяти чисел, больших 800 000, для которых сумма минимального и максимального делителей (кроме 1 и самого числа) оканчивается на 4. Функция m находит соответствующую сумму делителей, а основной цикл перебирает числа и выводит результаты.