Пусть M – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение M равным нулю.
Напишите программу, которая перебирает целые числа, бо́льшие 800 000, в порядке возрастания и ищет среди них такие, для которых M оканчивается на 4. В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце – соответствующие им значения M.
Например, для числа 20 М = 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 находит соответствующую сумму делителей, а основной цикл перебирает числа и выводит результаты.