Задание 25. Подсчёт чисел, удовлетворяющих условию — теория и разбор
Совет: выделите текст, чтобы спросить у ИИ, или наведите (на телефоне — тапните) на подчёркнутое слово — увидите подсказку.
Задание 25: подсчёт чисел, удовлетворяющих условию
На первый взгляд задание 25 выглядит как задачка на арифметику: делимость, остатки, диапазоны. На самом деле оно проверяет совсем другое — умение написать корректный полный перебор (иногда говорят brute force, «перебор в лоб»): программу, которая проходит по каждому числу диапазона и честно, без пропусков, проверяет заданное условие. Ошибаются в этом задании почти всегда не в математике, а в границах цикла или в логике проверки условия.
Что нужно знать
Что такое полный перебор
Полный перебор — это когда программа проверяет условие для каждого числа диапазона по очереди, ничего не пропуская и не угадывая закономерность заранее. Именно поэтому задание 25 нельзя решить «в уме» для больших диапазонов (там счёт может идти на миллионы чисел) — его решают программой, а не догадкой.
Главное: если хотя бы одно число из диапазона не попало под проверку — весь ответ может оказаться неверным, даже если алгоритм в остальном написан правильно.
Ключевой принцип: перебор корректен только тогда, когда он проверяет ВСЕ числа диапазона без пропусков — включая обе границы (левую и правую), если условие задачи говорит «принадлежащих отрезку» (это значит границы включаются).
Какие условия обычно комбинируют
Реальные варианты ЕГЭ комбинируют несколько типов условий одновременно:
- Делимость — число делится на A без остатка (
n % A == 0); - Остаток от деления — число при делении на A даёт остаток r (
n % A == r), гдеrможет быть любым, не только нулём; - Составные условия — делится на A, но не делится на A² (частый приём в вариантах ФИПИ, чтобы отсеять «слишком делимые» числа);
- Цифровые свойства — сумма цифр числа, конкретная цифра на нужной позиции, число соответствует «маске» вида
3?12?14*5, где?— любая цифра,*— любая последовательность цифр.
Обычно в одном задании соединяют два-три таких условия через логическое «И» — и весь секрет решения в том, чтобы верно записать эту связку в if.
Разбор примера
Условие: Сколько существует целых чисел на отрезке [900; 1100], которые при делении на 6 дают в остатке 3, а при делении на 5 дают в остатке 1?
Рассуждаем так: нужно найти числа n, для которых одновременно выполняются два условия — n mod 6 = 3 и n mod 5 = 1. Это классическая комбинация «остаток + остаток» — самый частый вид задания 25 в вариантах последних лет наряду с делимостью и масками (как в демоверсиях ФИПИ, где встречаются условия вроде «делится на 1917» или «делится на 5, 7 и 13, но не на их квадраты»). Подобрать такие числа по формуле можно (через китайскую теорему об остатках), но на экзамене надёжнее и безопаснее прогнать перебором — как и требует суть задания.
Показать решение и ответ
Переберём вручную все числа отрезка [900; 1100], которые дают остаток 3 при делении на 6 (это числа вида 900+3, 900+9, 900+15, … с шагом 6), и среди них отберём те, что дают остаток 1 при делении на 5:
- 921 → 921 : 6 = 153 (ост. 3) ✓; 921 : 5 = 184 (ост. 1) ✓ — подходит
- 951 → 951 : 6 = 158 (ост. 3) ✓; 951 : 5 = 190 (ост. 1) ✓ — подходит
- 981 → 981 : 6 = 163 (ост. 3) ✓; 981 : 5 = 196 (ост. 1) ✓ — подходит
- 1011 → 1011 : 6 = 168 (ост. 3) ✓; 1011 : 5 = 202 (ост. 1) ✓ — подходит
- 1041 → 1041 : 6 = 173 (ост. 3) ✓; 1041 : 5 = 208 (ост. 1) ✓ — подходит
- 1071 → 1071 : 6 = 178 (ост. 3) ✓; 1071 : 5 = 214 (ост. 1) ✓ — подходит
- 1101 уже выходит за правую границу отрезка (1101 > 1100), дальше не считаем
Остальные числа, дающие остаток 3 от деления на 6 (927, 933, 939 и т.д.), при проверке на остаток 1 от деления на 5 не подходят — их можно проверить тем же способом, но в готовое решение они не попадают.
Ответ: 6
Как решить в Python
Ниже — программа, решающая тот же пример полным перебором. Это ровно то, что от вас ждут на экзамене: не формула, а честная проверка каждого числа.
count = 0 # счётчик чисел, подходящих под условие
results = [] # список самих чисел — для проверки и наглядности
for n in range(900, 1101): # 1101, а не 1100 — правая граница 1100 включена
if n % 6 == 3 and n % 5 == 1: # проверяем оба условия одновременно
count += 1 # нашли подходящее число — увеличиваем счётчик
results.append(n) # запоминаем само число
print(count) # выводим количество: 6
print(results) # выводим список: [921, 951, 981, 1011, 1041, 1071]
Здесь важна каждая деталь: range(900, 1101) — потому что в Python верхняя граница range не включается, а по условию число 1100 входит в отрезок, значит правую границу нужно указать на единицу больше. Именно на такой ошибке чаще всего теряют балл на реальном экзамене. Если прогнать этот код, он выдаст count = 6 и список [921, 951, 981, 1011, 1041, 1071] — то есть ровно то, что мы получили при ручном переборе.
Как решить в Excel
Задание 25 прекрасно моделируется в Excel — это удобно показать ученику как альтернативный взгляд на тот же перебор, только «руками» через таблицу.
- В столбец A, начиная с ячейки A2, заполните числа от 900 до 1100 (Excel:
Главная → Заполнить → Прогрессия, шаг 1, предельное значение 1100) — это и есть ваш «диапазон перебора». - В столбец B внесите формулу остатка от деления на 6:
=ОСТАТ(A2;6). - В столбец C — остаток от деления на 5:
=ОСТАТ(A2;5). - В столбец D — проверку обоих условий сразу:
=ЕСЛИ(И(B2=3;C2=1);1;0)— единица, если число подходит, ноль — если нет. - Протяните формулы B2:D2 вниз до последней строки диапазона (до числа 1100).
- Итоговый ответ — сумма столбца D:
=СУММ(D2:D202)(если у вас 201 строка данных для чисел 900…1100). Это и есть количество чисел, удовлетворяющих условию.
Более компактный вариант — без вспомогательных столбцов, одной формулой массива:
=СУММПРОИЗВ((ОСТАТ(A2:A202;6)=3)*(ОСТАТ(A2:A202;5)=1))
СУММПРОИЗВ здесь работает как встроенный цикл: сравнивает остаток каждого числа диапазона с нужным значением и суммирует единицы там, где совпали оба условия — тот же перебор, но без единой строчки кода.