📋 Нули в 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 и подсчитать в нём нули.

Алгоритм

  1. Вычислить значение выражения средствами Python (длинная арифметика работает «из коробки»).
  2. Перевести число в 25-ричную систему: последовательно делить на 25 с остатком, пока число не станет нулём.
  3. Собрать остатки (это цифры записи) — от младших к старшим, затем развернуть.
  4. Подсчитать количество нулей методом 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}")

Page 1 of 1