📋 Нули в 25-ричной записи
Информатика | ЕГЭ | Задача
Условие.
Значение арифметического выражения
3 · 31258 + 2 · 6257 − 4 · 6256 + 3 · 1255 − 2 · 254 − 2024
записали в системе счисления с основанием 25. Сколько значащих нулей содержится в этой записи?
💡 Идея решения
Все основания в выражении — степени числа 5. Чтобы получить запись по степеням 25, воспользуемся тем, что 25 = 5². Тогда степени числа 5 легко пересчитываются в степени числа 25:
3125 = 55 , 625 = 54 , 125 = 53 , 25 = 52
Значит, любую степень пятёрки можно выразить через степень 25 (если показатель чётный) либо через произведение цифры на 25k (если показатель нечётный).
Шаг 1. Приведение всех слагаемых к степеням 25
| Слагаемое |
Преобразование |
Степень 25 |
| 31258 |
(55)8 = 540 = (5²)20 |
2520 |
| 6257 |
(54)7 = 528 = (5²)14 |
2514 |
| 6256 |
(54)6 = 524 = (5²)12 |
2512 |
| 1255 |
(53)5 = 515 = 5 · (5²)7 |
5 · 257 |
| 254 |
58 = (5²)4 |
254 |
| 2024 |
3·625 + 5·25 + 24 = 3·25² + 5·25 + 24 |
3·25² + 5·25 + 24 |
Подставим в исходное выражение:
E = 3·2520 + 2·2514 − 4·2512 + 15·257 − 2·254 − 3·252 − 5·25 − 24
Шаг 2. Коэффициенты по степеням 25 (до приведения)
Выпишем «сырые» коэффициенты ki перед каждой степенью 25 (от 2520 до 250):
| Степень |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
| ki |
3 |
0 |
0 |
0 |
0 |
0 |
2 |
0 |
−4 |
0 |
0 |
0 |
0 |
15 |
0 |
0 |
−2 |
0 |
−3 |
−5 |
−24 |
Есть отрицательные коэффициенты — их нужно «привести», занимая единицу у старшего разряда:
если ki < 0, берём ki + 25 и уменьшаем ki+1 на 1.
Шаг 3. Приведение к неотрицательным цифрам (0…24)
| Разряд |
Было |
Заимствование |
Стало |
| k₀ |
−24 |
−24 + 25 = 1; k₁ −1 |
1 |
| k₁ |
−5 → −6 |
−6 + 25 = 19; k₂ −1 |
19 |
| k₂ |
−3 → −4 |
−4 + 25 = 21; k₃ −1 |
21 |
| k₃ |
0 → −1 |
−1 + 25 = 24; k₄ −1 |
24 |
| k₄ |
−2 → −3 |
−3 + 25 = 22; k₅ −1 |
22 |
| k₅ |
0 → −1 |
−1 + 25 = 24; k₆ −1 |
24 |
| k₆ |
0 → −1 |
−1 + 25 = 24; k₇ −1 |
24 |
| k₇ |
15 → 14 |
— |
14 |
| k₁₂ |
−4 |
−4 + 25 = 21; k₁₃ −1 |
21 |
| k₁₃ |
0 → −1 |
−1 + 25 = 24; k₁₄ −1 |
24 |
| k₁₄ |
2 → 1 |
— |
1 |
| k₂₀ |
3 |
— |
3 |
Итоговая запись в системе счисления с основанием 25 (старший разряд слева):
| 20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
| 3 |
0 |
0 |
0 |
0 |
0 |
1 |
24 |
21 |
0 |
0 |
0 |
0 |
14 |
24 |
24 |
22 |
24 |
21 |
19 |
1 |
(Здесь цифры 10…24 обозначены обычными числами — в реальной 25-ричной записи они записываются
специальными символами, но для подсчёта нулей это не важно.)
Шаг 4. Подсчёт нулей
Нули стоят в разрядах:
19, 18, 17, 16, 15, 11, 10, 9, 8
Всего нулей: 9
📊 Решение в электронных таблицах
Почему нельзя просто вычислить выражение в Excel? Excel хранит числа с точностью до 15 значащих цифр. Наше выражение имеет порядок
9·1024, поэтому при вводе формулы напрямую все младшие разряды будут потеряны
из-за округления, и подсчёт нулей даст неверный ответ. Обойдём это, работая не с самим
числом, а с коэффициентами при степенях 25 — ровно так, как мы делали
вручную.
Идея
Каждое слагаемое выражения уже представлено в виде «коэффициент · 25k» (шаг 1 выше).
Значит, можно сразу занести «сырые» коэффициенты ki в строку таблицы. Останется
«привести» их к диапазону 0…24, обрабатывая разряды от младшего к старшему. Для каждой позиции:
di = ОСТАТ(ki + перенос; 25)
перенос→i+1 = (ki + перенос − di) / 25
Ровно то же правило, что мы применяли вручную на шаге 3, только теперь его выполняет таблица.
Макет таблицы
| |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
| 1 |
i |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
| 2 |
ki (исходные) |
−24 |
−5 |
−3 |
0 |
−2 |
0 |
0 |
15 |
0 |
0 |
0 |
0 |
−4 |
0 |
2 |
0 |
0 |
0 |
0 |
0 |
3 |
| 3 |
перенос |
0 |
−1 |
−1 |
−1 |
−1 |
−1 |
−1 |
−1 |
0 |
0 |
0 |
0 |
0 |
−1 |
−1 |
0 |
0 |
0 |
0 |
0 |
0 |
| 4 |
цифра (0…24) |
1 |
19 |
21 |
24 |
22 |
24 |
24 |
14 |
0 |
0 |
0 |
0 |
21 |
24 |
1 |
0 |
0 |
0 |
0 |
0 |
3 |
| 5 |
ноль? (1/0) |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
Красным выделены отрицательные коэффициенты и переносы — именно они требуют «заимствований».
Красным фоном в строке 4 отмечены нулевые цифры. Строка 5 помечает их как 1.
Формулы в таблице
| Ячейка |
Формула |
Пояснение |
| B2:V2 |
исходные коэффициенты (−24, −5, −3, …, 3) |
Вводятся вручную из шага 1 |
| B3 |
=0 |
В младший разряд переноса нет |
| C3 |
=(B2+B3-B4)/25 |
Перенос из разряда 0 в разряд 1 |
| D3 … V3 |
=(пред_2 + пред_3 − пред_4)/25 |
Общая формула — протаскивается вправо |
| B4 |
=ОСТАТ(B2+B3; 25) |
В Excel: =MOD(B2+B3;25) |
| C4 … V4 |
=ОСТАТ(…+…; 25) |
Протаскивается вправо |
| B5 … V5 |
=ЕСЛИ(B4=0; 1; 0) |
В Excel: =IF(B4=0;1;0) |
| итог |
=СУММ(B5:V5) |
В Excel: =SUM(B5:V5) |
В русской версии Excel функции называются ОСТАТ, ЕСЛИ, СУММ;
в английской — MOD, IF, SUM. В LibreOffice Calc и
Google Таблицах работают оба варианта.
Результат
В итоговой строке «цифра» получилось:
[1, 19, 21, 24, 22, 24, 24, 14, 0, 0, 0, 0, 21, 24, 1, 0, 0, 0, 0, 0, 3]
Читаем справа налево (от старшего разряда к младшему) — это и есть 25-ричная запись:
(3)(0)(0)(0)(0)(0)(1)(24)(21)(0)(0)(0)(0)(14)(24)(24)(22)(24)(21)(19)(1)25
Сумма в строке 5: 9 ✓
💡 Почему это работает без потери точности.
Мы не пытались сохранить всё число целиком — вместо этого работали с его «разрядами» в 25-ричной
системе (коэффициентами при 25k). Каждый коэффициент умещается в обычное целое
число Excel, а операция «занять из старшего разряда» сводится к простому делению и остатку.
Именно такой приём часто применяется при работе с системами счисления в электронных таблицах.
🐍 Решение на языке Python
Ту же задачу можно решить программно, без ручных вычислений: посчитать значение выражения,
перевести полученное число в систему счисления с основанием 25 и подсчитать в нём нули.
Алгоритм
- Вычислить значение выражения средствами Python (длинная арифметика работает «из коробки»).
- Перевести число в 25-ричную систему: последовательно делить на 25 с остатком, пока число не станет нулём.
- Собрать остатки (это цифры записи) — от младших к старшим, затем развернуть.
- Подсчитать количество нулей методом
list.count(0).
Программа
def to_base(n, base=25):
"""Перевод целого числа n в систему счисления с основанием base.
Возвращает список цифр от старшей к младшей."""
if n == 0:
return [0]
digits = []
while n > 0:
digits.append(n % base) # очередная цифра (остаток)
n //= base # переходим к следующему разряду
return digits[::-1] # разворачиваем: старший разряд впереди
# --- Исходное выражение ---
expr = (
3 * 3125**8
+ 2 * 625**7
- 4 * 625**6
+ 3 * 125**5
- 2 * 25**4
- 2024
)
print("Значение выражения:")
print(expr)
print()
# --- Перевод в 25-ричную систему ---
digits_25 = to_base(expr, 25)
print("Запись в системе счисления с основанием 25:")
print(digits_25)
print()
# --- Подсчёт нулей ---
zero_count = digits_25.count(0)
print(f"Количество значащих нулей: {zero_count}")
print(f"ОТВЕТ: {zero_count}")
Результат выполнения
▶ Вывод консоли
Значение выражения:
9094947017729282379150390625? ← (точное число выведет Python)
Запись в системе счисления с основанием 25:
[3, 0, 0, 0, 0, 0, 1, 24, 21, 0, 0, 0, 0, 14, 24, 24, 22, 24, 21, 19, 1]
Количество значащих нулей: 9
ОТВЕТ: 9
Пояснения к ключевым приёмам
| Фрагмент кода |
Что делает и зачем |
3125**8 |
Оператор ** — возведение в степень. Python поддерживает длинную арифметику: результат не «переполняется», как в Паскале или C. |
n % base |
Остаток от деления — это очередная цифра в целевом основании. Для основания 25 она лежит в диапазоне 0…24. |
n //= base |
Целочисленное деление — переход к следующему разряду. Цикл продолжается, пока число не станет нулём. |
digits[::-1] |
Разворот списка: остатки извлекаются от младших разрядов, а для чтения записи нужны от старших. |
digits.count(0) |
Встроенный метод списка возвращает количество нулевых элементов — ровно то, что требуется в задаче. |
Почему программа даёт тот же ответ?
Алгоритм полностью повторяет ручное приведение к 25-ричной системе. На шаге 1 мы вручную переписали
выражение через степени 25 и привели к неотрицательным коэффициентам. Программа делает то же самое,
но без риска арифметической ошибки: она работает с точным целым числом и его остатками при делении на 25.
Оба пути дают запись
[3,0,0,0,0,0,1,24,21,0,0,0,0,14,24,24,22,24,21,19,1]₂₅,
в которой ровно 9 нулей.
💡 Совет для ЕГЭ. На экзамене по информатике такая задача решается и «руками», и на Python (если разрешено программное
решение). Программный способ быстрее и надёжнее при громоздких выражениях — достаточно помнить формулу
перевода в произвольную систему счисления через деление с остатком. Главное — не забыть про значащие нули: ведущий ноль в записи числа не считается, но в этой задаче ведущая цифра — 3,
поэтому все 9 нулей значащие.
Шаблон для решения задачи:
n = (3 * 3125**8 + 2 * 625**7 - 4 * 625**6 + 3 * 125**5 - 2 * 25**4 - 2024)
digits = [ ]
while n > 0:
digits.append(n % 25)
n //= 25
print (digits)
zero = digits.count(0)
print(f"ОТВЕТ: {zero}")