К содержанию

Подтема 4 из 6

Выражение с параметром x

Если из выражения вычитают неизвестное число x, его перебирают и для каждого заново считают цифры.

x — число, а не цифра

Изменим задачу темы: вместо 10 вычитают неизвестное x. «Значение 5²³ + 25¹² − x, где x — натуральное число, не больше 2030, записали в пятеричной системе. Найди наибольшее x, при котором в записи ровно 22 цифры 4.»

Здесь x — обычное число в выражении, а не цифра записи. Поэтому проверяют все x от 1 до 2030 и для каждого заново считают четвёрки. Подсчёт оформим функцией count4 — это тот же цикл из подтемы 3:

def count4(n):    count = 0    while n > 0:        if n % 5 == 4:            count = count + 1        n = n // 5    return count  answer = Nonefor x in range(1, 2031):    if count4(5**23 + 25**12 - x) == 22:        answer = xprint(answer)
1876

Перебор идёт по возрастанию, поэтому последнее запомненное x и есть наибольшее. в начале значит «пока ничего не нашли».

Почему ответ 1876

Откуда взялось 1876? Это можно понять и без программы.

Четвёрка в записи остаётся там, где у числа x − 1 стоит ноль. Вычесть x — всё равно что вычесть сначала 1, а потом x − 1: 5²³ + 25¹² − x = 5²⁴ + (5²³ − 1) − (x − 1). А 5²³ − 1 — это 23 четвёрки (подтема 2). Из четвёрки можно вычесть любую пятеричную цифру без займа, поэтому x − 1 вычитается из них поразрядно.

x = 1876: x − 1 = 1875 = 30000₅. Ненулевая цифра у x − 1 одна — значит, из 23 четвёрок остаются 22.

Значит, 22 четвёрки получаются, когда у x − 1 ровно одна ненулевая цифра, то есть x − 1 = d · 5ᵏ. Самое большое такое число до 2029 — 3 · 625 = 1875. Отсюда x = 1876, как и у программы.

Количество меняется скачками

Можно ли остановить перебор, когда четвёрок стало меньше 22?

Нет: количество цифр меняется скачками и при следующих x может снова вырасти. Посмотри на первые 125 значений x:

Четвёрок 22 при x = 2, 3, 4, 5, 6, 11, 16, 21, 26, 51, 76 и 101 — у всех этих x − 1 одна ненулевая цифра. Между ними — 21 и 20.

Поэтому проверяют все x из условия, а не только до первой неудачи.

Наибольшее и наименьшее x

А если спрашивают наименьшее x — или верхней границы у x нет вовсе?

Наименьшее x — первое подходящее при переборе по возрастанию, наибольшее — последнее. Выбери вопрос:

Наибольшее x до 2030
запомнить последнее подходящееили range(2030, 0, -1) и на первом
Наименьшее x до 2030
break на первом подходящем
Наименьшее x, границы нет
while до первого подходящего
Наибольшее количество цифр
запоминать лучшее количество и его x

Например, наименьшее x, при котором четвёрок ровно 20, ищут циклом while — он остановится на первом подходящем:

x = 1while count4(5**23 + 25**12 - x) != 20:    x = x + 1print(x)
32

Проверка: x − 1 = 31 = 111₅ — три ненулевые цифры, 23 − 3 = 20 четвёрок.

Тонкости:когда перебор идёт слишком долго

Программа проверяет порядка миллиона x в секунду. Если цикл не закончился за несколько секунд, ответ лежит очень далеко, и начало перебора находят рассуждением о блоках записи — это разобрано в дополнительном уроке.

Итого

  • x в выражениичисло, перебор по диапазону
  • Наибольшеепоследнее подходящее
  • Наименьшеепервое и break или while
  • Скачкиперебирают все x, без границы
  • Проверкаq − 1 остаётся там, где у x − 1 ноль
  • Пример22 четвёрки — x = 1876

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1
Почему x в 5²³ + 25¹² − x перебирают до 2030, а не только от 0 до 4?
ОтветСкрыть ответ
Ответ
x — число в выражении, а не цифра записи.
Вопрос 2
Сколько четвёрок в записи 5²³ + 25¹² − 1?
ОтветСкрыть ответ
Ответ
23: x − 1 = 0, из четвёрок ничего не вычитают.
Вопрос 3
А в записи 5²³ + 25¹² − 7?
ОтветСкрыть ответ
Ответ
21: x − 1 = 6 = 11₅ — две ненулевые цифры, две четвёрки уходят.
Вопрос 4
Как найти наименьшее подходящее x, а не наибольшее?
ОтветСкрыть ответ
Ответ
Перебирать по возрастанию и остановиться на первом подходящем.
Вопрос 5
Можно ли остановить перебор, когда количество четвёрок стало меньше нужного?
ОтветСкрыть ответ
Ответ
Нет: количество меняется скачками и при следующих x снова вырастает.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Наибольшее x: ровно четыре четвёрки

Найди наибольшее x от 1 до 200, при котором в пятеричной записи 5⁶ − x ровно четыре цифры 4.

Введите число.

Значение арифметического выражения 7¹⁰⁰ + 7⁵⁰ − x, где x — целое положительное число, не превышающее 3000, записали в семеричной системе счисления. Определи наибольшее значение x, при котором в записи содержится ровно 53 нуля.

Введите число.

Четвёрки в 5⁶ − 1 и 5⁶ − 2

Сколько цифр 4 в пятеричной записи числа 5⁶ − 2?

Введите число.

Наименьшее x с наибольшим числом нулей

Значение выражения 5⁶ − x, где x — натуральное число, не превышающее 500, записали в пятеричной системе. Найди наименьшее x, при котором количество нулей в записи максимально.

Введите число.

Значение арифметического выражения 11 · 13²⁰ + 13¹⁰ − x, где x — целое положительное число, записали в 13-ричной системе счисления. Определи наименьшее значение x, при котором в записи ровно 7 цифр с числовым значением 12.

Введите число.

Наибольшее количество нулей

Значение арифметического выражения 6¹²⁰ + 6⁶⁰ − x, где x — натуральное число, не превышающее 2000, записали в шестеричной системе счисления. Определи максимальное количество нулей в этой записи.

Введите число.