Добавить в корзинуПозвонить
Найти в Дзене

Решение 25-ых заданий с сайта Полякова

В статье представленные решения номеров № 8132, № 8131 и № 8130 (25 номер из егэ) с сайта Константина Полякова (https://kpolyakov.spb.ru/) (№ 8132) (ЕГКР-2025) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300425.
Найдите все натуральные числа, не превышающие 1010, которые соответствуют маске 4*4736*1 и делятся на 7993 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на 7993. 1 способ решения: from fnmatch import fnmatch
for x in range(7993, 10**10+1, 7993):
if fnmatch(str(x), "4*4736*1"):
print(x, x//7993) 2 способ решения: for x in range(7993, 10**10+1, 7993):

В статье представленные решения номеров № 8132, № 8131 и № 8130 (25 номер из егэ) с сайта Константина Полякова (https://kpolyakov.spb.ru/)

(№ 8132) (ЕГКР-2025) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300425.
Найдите все натуральные числа, не превышающие 1010, которые соответствуют маске 4*4736*1 и делятся на 7993 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на 7993.

№8132
№8132

1 способ решения:

from fnmatch import fnmatch
for x in range(7993, 10**10+1, 7993):
if fnmatch(str(x), "4*4736*1"):
print(x, x//7993)

2 способ решения:

for x in range(7993, 10**10+1, 7993):
s = str(x)
if s[0] == "4" and s[-1] == "1" and "4736" in s[1:]:
print(x, x//7993)

(№ 8131) (Открытый вариант-2025) Пусть R – сумма всех различных натуральных делителей целого числа. Например, для числа 20 имеем R = 1 + 2 + 4 + 5 + 10 + 20 = 42. Напишите программу, которая перебирает целые числа, бо́льшие 500 000, в порядке возрастания и ищет среди них такие, для которых значение R оканчивается на цифру 6. В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце – пять соответствующих этим числам значений R.

№8131
№8131

k = 0 # количество чисел, которые вывелись
for x in range(500_000, 1_000_000): # перебор доступных чисел (вторая граница может быть больше или меньше)
sm1 = set() # множество для хранения всех делителей
for i in range(1, int(x**0.5)+1): # перебор делителей для каждого числа
if x%i == 0: # проверка на то, является ли i делителем для x
sm1.add(i) # если оно является делителем, то добавляем в множество оба делителя, которые нашли
sm1.add(x//i)
sm2 = sum(sm1) # сумма делителей числа
if sm2 % 10 == 6: # остаток от деления на 10 - последняя цифра числа
print(x, sm2) # выводим число и его сумму делителей
k += 1 # увеличиваем количество чисел, которые вывели
if k == 5: # если уже вывелось 5 чисел, то прерываем программу
break

(№ 8130) (Апробация-2025) Пусть М – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение М равным нулю. Например, для числа 20 имеем М = 2 + 10 = 12. Напишите программу, которая перебирает целые числа, большие 700 000, в порядке возрастания и ищет среди них такие, для которых М оканчивается на 4. В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце – соответствующие им значения М.

№8130
№8130

k = 0 # количество чисел, которые вывелись
for x in range(700_000, 1_000_000): # перебор доступных чисел (вторая граница может быть больше или меньше)
sm1 = set() # множество для хранения нужных делителей
for i in range(2, int(x**0.5)+1): # перебор делителей для каждого числа
if x%i == 0: # проверка на то, является ли i делителем для x
sm1.add(i) # если оно является делителем, то добавляем в множество оба делителя, которые нашли
sm1.add(x//i)
break # останавливаем цикл, так как самые первые два делителя уже будут максимальным и минимальным
M = sum(list(sm1)) # сумма делителей числа
if M % 10 == 4: # остаток от деления на 10 - последняя цифра числа
print(x, M) # выводим число и его сумму нужных делителей
k += 1 # увеличиваем количество чисел, которые вывели
if k == 5: # если уже вывелось 5 чисел, то прерываем программу
break