Задание 25. Программирование. Обработка целочисленной информации. ЕГЭ 2026 по информатике
Средний процент выполнения: 40.2%
Ответом к заданию 25 по информатике может быть развернутый ответ (полная запись решения с обоснованием выполненных действий).
Подпишись на суперполезные материалы
Задачи для практики
Задача 1
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: — символ «?» означает ровно одну произвольную цифру; — символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательноcть. Среди натуральных чисел, не превышающих 10^9, найдите все числа, соответствующие маске 1234?57??, делящиеся на число 146 без остатка. В ответе запишите количество найденных чисел.
Решение
from fnmatch import fnmatch
for i in range(0,10**9,146):
if fnmatch(str(i),'1234?57??'):
print(i,i//146)
123405770 845245
123425772 845382
123435700 845450
123445774 845519
123455702 845587
123465776 845656
123475704 845724
123485778 845793
123495706 845861
Задача 2
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
1) символ «?» означает ровно одну произвольную цифру;
2) символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задаватьи пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 108, найдите все числа, соответствующие маске 1?3?1*5?6, делящиеся на 629 без остатка.
В ответе запишите сумму результатов от деления найденных чисел на 629.
Количество строк в таблице для ответа избыточно.
Решение
from fnmatch import fnmatch
s = 0
for x in range(0, 10 ** 8, 629):
if fnmatch(str(x), '1?3?1*5?6'):
s += x // 629
print(s)
Задача 3
Напишите программу, которая перебирает целые числа, большие 600 000, в порядке возрастания и ищет среди них такие числа, что среди делителей этого числа, есть делитель оканчивающийся на 6, не считая само число и делитель равный 6 . Вывести первые 5 найденных чисел.
Формат вывода: для каждого из 5 таких найденных чисел запишите их в порядке возрастания через пробел.
Решение
Приведём решение номера на языке программирования Python. Можно решить стандартным путём:
def m(n):
for i in range(2, n):
if n % i == 0:
if i != 6 and i % 10 == 6:
return True
return False
number = 600_000
k = 0
while k < 5:
number += 1
if m(number):
print(number, end=" ")
k += 1
Задача 4
Пусть M – сумма минимального и максимального натуральных различных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение M равным нулю.
Напишите программу, которая перебирает целые числа, большие 452 023, в порядке возрастания и ищет среди них такие, для которых значение M при делении на 7 даёт в остатке 4. Вывести первые 3 найденных чисел.
Формат вывода: для каждого из 3 таких найденных чисел запишите их в порядке возрастания через пробел.
Решение
Приведём решение номера на языке программирования Python
def m(n):
divisors = []
for i in range(2, n):
if n % i == 0:
divisors.append(i)
if len(divisors) > 1:
return min(divisors) + max(divisors)
return 0
number = 452_023
k = 0
while k < 5:
number += 1
if m(number) % 7 == 4:
print(number)
k += 1
Ответ: 452036 452049 452050
Задача 5
Пусть M – количество натуральных различных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение M равным нулю.
Напишите программу, которая перебирает целые числа, большие 124 987, в порядке возрастания и ищет среди них такие, для которых значение M при равно 3. Вывести первые 3 найденных чисел.
Формат вывода: для каждого из 3 таких найденных чисел запишите их в порядке возрастания через пробел.
Решение
Приведём решение номера на языке программирования Python. Можно решить стандартным путём:
def m(n):
divisors = []
for i in range(2, n):
if n % i == 0:
divisors.append(i)
return len(divisors)
number = 124_987
k = 0
while k < 3:
number += 1
if m(number) == 3:
print(number, end=" ")
k += 1
Но такой способ имеет достаточно долгое решение. Можно вспомнить, что нечётное количество делителей есть только у чисел из которых можно вычесть квадратный корень. Тогда задачу можно решить гораздо быстрее:
def m(n):
divisors = []
for i in range(2, n):
if n % i == 0:
divisors.append(i)
return len(divisors)
number = 124_609
z = 707
k = 0
while k < 3:
number += z
z += 2
if m(number) == 3:
print(number, end=" ")
k += 1
Но и этот способ можно ускорить, если знать, что до корня из числа должен встретиться ровно 1 корень
def m(n):
divisors = []
for i in range(2, int(n ** 0.5)):
if n % i == 0:
divisors.append(i)
return len(divisors)
number = 124_609
z = 707
k = 0
while k < 3:
number += z
z += 2
if m(number) == 1:
print(number, end=" ")
k += 1
Ещё один способ заключается в том, чтобы перебирать не квадраты чисел, а числа до возведения в квадрат. Таким образом вычисляем корень из 124 987 и двигаемся от числа 354
def m(n):
divisors = []
for i in range(2, int(n ** 0.5)):
if n % i == 0:
divisors.append(i)
return len(divisors)
number = 354
k = 0
while k < 3:
new_number = number ** 2
if m(new_number) == 1:
print(new_number, end=" ")
k += 1
number += 1
Рекомендуемые курсы подготовки
- Узнаешь всё про кодирование: что это такое и как происходит
- Познакомишься с Условием Фано: как оно примняется и почему важно
- Научишься считать колиечтсво информации и сколько под неё нужно выделить памяти
на бесплатном курсе Турбо ЕГЭ