14 задание ЕГЭ информатика почти всегда связано с системами счисления и вычислением значения выражения. Обычно нужно либо найти количество определённых цифр в записи числа в некотором основании, либо подобрать неизвестную цифру x так, чтобы выражение делилось на заданное число, либо найти максимальное/минимальное x при дополнительных условиях.

Главная фишка 14 задания: оно решается быстро, если вы знаете 2–3 универсальных шаблона на Python и умеете аккуратно работать с переводом в систему счисления.

Что встречается в 14 задании: все типы

Тип 1. Посчитать цифры в записи числа в основании p

Формулировка похожа на:

«Значение выражения … записали в системе счисления с основанием p. Сколько цифр с определённым свойством (например, больше 9 / равны 0 / нечётные)?»

Что делать:

  1. вычислить значение выражения
  2. перевести в основание p
  3. посчитать нужные цифры

Тип 2. Неизвестная цифра x в записи чисел в основании p

Формулировка:

«Операнды записаны в системе с основанием p. В записи чисел переменной x обозначена неизвестная цифра. Найдите наибольшее x, при котором выражение кратно k. Затем найдите частное.»

Что делать:

  1. перебрать x от p-1 до 0 (если ищем максимум)
  2. подставить x в строку числа
  3. перевести в десятичную систему
  4. проверить делимость
  5. вывести частное

Тип 3. Подбор x по условию о количестве нулей в записи

Формулировка:

«Выражение … – x записали в системе с основанием p. Найдите наибольшее x, при котором в записи числа ровно N нулей.»

Что делать:

  1. перебрать x в заданном диапазоне
  2. вычислить значение выражения
  3. перевести в основание p
  4. посчитать количество нулей
  5. выбрать наибольшее подходящее x

База, которую нужно знать для 14 задания

Как переводить число в систему счисления p

Делим число на p и собираем остатки.

Шаблон Python:

def to_base(n, base):

digits = []

while n > 0:

digits.append(n % base)

n //= base

return digits[::-1] # список цифр слева направо

Если нужен текст (для подсчёта символов), можно сделать строку:

def to_base_str(n, base):

alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

s = ""

while n > 0:

s = alphabet[n % base] + s

n //= base

return s or "0"

Как решать 14 задание ЕГЭ информатика: универсальный алгоритм

  1. Определите тип: “посчитать цифры”, “найти x”, “найти x по нулям”.
  2. Всегда переводите все входные числа в десятичную систему через Python.
  3. Для больших степеней используйте pow(a, b) или a ** b (Python выдерживает большие числа).
  4. Запись числа в основании p получайте через функцию перевода.
  5. Для подсчёта цифр работайте со списком цифр (это надёжнее, чем со строкой).

Тип 1: посчитать цифры с условием (пример + шаблон)

Пример логики: “найдите количество цифр больше 9 в записи в основании p”.

Решение:

def to_base_digits(n, base):

digits = []

while n > 0:

digits.append(n % base)

n //= base

return digits[::-1] if digits else [0]

Пример вычисления выражения

p = 27

value = 2 * (p ** 10) + 7 * (p ** 5) + 12345 # пример

digits = to_base_digits(value, p)

count = sum(1 for d in digits if d > 9)

print(count)

Важно:

цифры “больше 9” — это именно числовые значения цифр, а не символы.

Занятия с опытными репетиторами по информатике на удобной онлайн платформе Easyknow!

Тип 2: неизвестная цифра x в основании p (шаблон “максимальный x”)

Частая модель: два числа с x, их сумма (или разность) кратна k.

Шаблон:

p = 29

k = 28

a_pattern = "923x874"

b_pattern = "524x6152"

best_x = None

best_value = None

for x in range(p - 1, -1, -1):

digit = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[x]

a = int(a_pattern.replace("x", digit), p)

b = int(b_pattern.replace("x", digit), p)

value = a + b

if value % k == 0:

best_x = x

best_value = value

break

print(best_x, best_value // k)

Как применять:

  • если в условии “наибольшее x” — перебираем x по убыванию.
  • если “наименьшее x” — перебираем по возрастанию.

Частая ошибка:

забывают, что допустимые цифры в основании p — от 0 до p-1.

Тип 3: подобрать x по количеству нулей в записи (шаблон)

Шаблон:

def to_base_digits(n, base):

digits = []

while n > 0:

digits.append(n % base)

n //= base

return digits[::-1] if digits else [0]

base = 11

need_zeros = 60

Константная часть выражения:

const_value = 9 * (base ** 210) + 8 * (base ** 150) # пример структуры

best_x = None

for x in range(3000, 0, -1): # если нужно наибольшее x

value = const_value - x

digits = to_base_digits(value, base)

if digits.count(0) == need_zeros:

best_x = x

break

print(best_x)

Тонкость:

перевод может быть долгим, если перебор большой. Ускоряют так:

  1. заранее считают const_value
  2. используют список цифр, а не строку
  3. быстро отсекают неподходящее (например, по последним разрядам, если умеете)

Частые ошибки в 14 задании

  1. Путают основание системы и “цифры больше 9”: в основании 11 цифра 10 существует и это одна цифра.
  2. Работают со строками и сравнивают символы вместо числовых значений.
  3. Забывают про допустимые цифры для x (x не может быть равен основанию и выше).
  4. Не переводят сантиметры в метры — это не сюда, но аналогичная ошибка: не переводят числа из основания p корректно.
  5. Перебирают x “в неправильную сторону” и получают не максимум/минимум.

Советы easyknow

  1. Держите 3 шаблона: “подсчёт цифр”, “перебор x на делимость”, “перебор x на нули”.
  2. Переводите в основание через список цифр — так меньше ошибок.
  3. Всегда проверяйте, что x в диапазоне 0..p-1.
  4. Если задача на максимум — перебор по убыванию экономит время.

Эта статья — лишь фрагмент знаний. На платформе Easyknow вся подготовка становится системой: от большой коллекции материалов по разным предметам до домашних заданий с проверкой. Всё в одном месте, по вашему личному плану. Переходите на платформу и получите скидку 40% на первый месяц занятий с репетитором. Скидка активируется сразу после регистрации.