Задание высокого уровня сложности, на его выполнение отводится 20 минут. Оно проверяет умение создавать программы для обработки целочисленных данных.
Задача 1: Минимальный и максимальный делители
Условие: Пусть M — сумма минимального и максимального натуральных делителей целого числа (не считая единицы и самого числа). Если таких делителей нет, M = 0. Напишите программу, которая перебирает целые числа больше 800 000 в порядке возрастания и находит среди них такие, для которых M оканчивается на четвёрку. В ответе запишите первые пять найденных чисел и соответствующие им значения M.
Решение:
Программа перебирает числа, начиная с 800 001. Для хранения количества найденных чисел используется переменная K. Для каждого числа I ищется множество делителей divs. Перебор делителей ведётся от 2 до квадратного корня из I, так как если d — делитель, то I/d — тоже делитель.
import math
A = 800001
K = 0
while K < 5:
divs = set()
for d in range(2, int(math.sqrt(A)) + 1):
if A % d == 0:
divs.add(d)
divs.add(A // d)
if len(divs) > 0:
M = min(divs) + max(divs)
if M % 10 == 4:
print(A, M)
K += 1
A += 1
Код инициализирует переменную A значением 800001. Цикл while продолжается до нахождения 5 чисел, удовлетворяющих условию. Вложенный цикл for перебирает числа от 2 до квадратного корня из A. Если число является делителем, оно добавляется в множество divs. Если множество не пусто, вычисляется сумма минимального и максимального делителей (M), и проверяется, оканчивается ли M на 4. Если да, то выводится число A и значение M.
Задача 2: Маска и делимость
Условие: Среди натуральных чисел, не превышающих 10<sup>10</sup>, найдите все числа, которые соответствуют маске 3??1?1?5 и делятся на 1917 без остатка.
Решение:
Программа перебирает числа, кратные 1917, начиная с нуля, с шагом 1917, и проверяет соответствие маске 3??1?1?5.
import fnmatch
for x in range(0, 10**10, 1917):
if fnmatch.fnmatch(str(x), '3??1?1?5'):
print(x, x // 1917)
Код перебирает числа, кратные 1917, с шагом 1917, от 0 до 10<sup>10</sup>. Для каждого числа проверяется соответствие маске ‘3??1?1?5’ с помощью функции fnmatch.fnmatch. Если число соответствует маске, оно выводится вместе с результатом деления на 1917.
Разбор задач демонстрирует применение различных алгоритмов и встроенных модулей Python для решения задач на обработку чисел и соответствие шаблонам. Важно понимать принципы поиска делителей, работу с множествами и использование функций для проверки соответствия строк шаблонам.