Подтема 5 из 6
Неизвестные цифры
Неизвестная цифра x в записи: какие значения она принимает, как её перебрать, что записать в ответ — и две неизвестные цифры.
Что значит x в записи
Третий вид задания: «Операнды выражения записаны в системе с основанием 18: 77968x11₁₈ + 4x213₁₈. x — неизвестная цифра из алфавита 18-ричной системы. Найди наибольшее x, при котором значение выражения кратно 7, и запиши в ответ частное от деления значения на 7.»
Здесь x — одна цифра записи: она одинакова во всех местах, где стоит, и принимает значения от 0 до q − 1. 4x213₁₈ при x = 5 — это 45213₁₈, а не 4 · 5 · 213. Для основания 18 цифра x — от 0 до 17.
Но границы x зависят от формулировки условия — выбери вариант:
- x — цифра 18-ричной системы
- 0, …, 17
- x — цифра из алфавита десятичной системы
- 0, …, 9даже если числа записаны в основании 18
- x стоит в записях с основаниями 8 и 13
- 0, …, 7цифра должна быть допустима в обеих
- x — первая цифра числа
- ноль исключается
Перебор цифры
Как найти x? Значений у x всего 18 — проще всего проверить каждое.
Для каждой цифры собирают обе записи, считают их сумму и проверяют, делится ли она на 7. Собрать запись можно строкой или списком цифр:
Перебирают символы алфавита: цифры 0–9 и буквы a–h для значений 10–17. Строки склеивают знаком + и читают int(s, 18):
for x in '0123456789abcdefgh': a = int('77968' + x + '11', 18) b = int('4' + x + '213', 18) if (a + b) % 7 == 0: print(x, (a + b) // 7)Функция value читает запись слева направо: дописать справа цифру d — значит заменить значение v на v · q + d. Пройди по шагам:
def value(ds, q): v = 0 for d in ds: v = v * q + d return v print(value([2, 3, 0, 4], 5))Цифры — числа, на месте x стоит сама переменная цикла. Перебор сверху вниз сразу даёт наибольшее x:
for x in range(17, -1, -1): a = value([7, 7, 9, 6, 8, x, 1, 1], 18) b = value([4, x, 2, 1, 3], 18) if (a + b) % 7 == 0: print(x, (a + b) // 7) breakПодходят цифры 3, a = 10 и h = 17; наибольшая — h. Ответ: частное 648833380.
Тонкости:строки и основания больше 36
В строку подставляют символ цифры, а не str её значения: при x = 10 запись '1' + str(x) + '2' даст четыре цифры 1102 вместо трёх. При основании больше 36 букв не хватает — тогда только список цифр и value.
Что записать в ответ
Нашли x = 17. Это ответ?
В ответ записывают ровно ту величину, о которой спрашивают: цифру, значение выражения или частное. В нашей задаче это частное от деления на 7. Посмотри, что пришлось бы записать при других вопросах:
- частное от деления на 7
- 648833380
- значение выражения
- 4541833660в десятичной системе
- цифру x
- 17её значение, а не символ h
Если в условии сказано «ненулевая цифра», перебор начинают с 1. А если в выражении есть вычитание, так и пиши в программе: a + b - c.
Разные основания
А если записи с x в разных системах — например, 3x2₈ + 2x5₁₃, и сумма должна делиться на 17?
Значение цифры x одно, а вес разряда в каждой записи свой; x должен быть допустим во всех записях. Цифра есть в восьмеричной записи, значит, x — от 0 до 7. В 3x2₈ она умножается на 8, в 2x5₁₃ — на 13. Значения удобно считать функцией value из вкладки «Списком цифр»:
for x in range(8): a = value([3, x, 2], 8) b = value([2, x, 5], 13) if (a + b) % 17 == 0: print(x, (a + b) // 17) breakx = 6: 362₈ + 265₁₃ = 242 + 421 = 663 = 17 · 39.
Две неизвестные цифры
Бывает и две неизвестные цифры. Например: найди наименьшее значение 1xy₅ + 2yx₇, кратное 5, и запиши частное от деления на 5.
Пары перебирают двумя вложенными циклами и сравнивают все подходящие: первая найденная пара почти никогда не даёт наименьшее значение. Обе цифры есть в пятеричной записи, поэтому x и y — от 0 до 4: всего 25 пар.
best = Nonefor x in range(5): for y in range(5): total = value([1, x, y], 5) + value([2, y, x], 7) if total % 5 == 0: if best is None or total < best: best = totalprint(best, best // 5)В best лежит наименьшая подходящая сумма. Условие верно для первой подходящей суммы и для каждой меньшей. Ответ: 135 / 5 = 27.
Тонкости:разные буквы и вопросы о паре
Разные буквы могут обозначать одинаковые цифры, если условие не запрещает. Диапазоны букв считают отдельно: в 1x2₈ + 2yA₁₆ x — до 7, а y — до 15. Если спрашивают о самой паре («запись yx — наибольшая»), сравнивают уже эту величину. во внутреннем цикле останавливает только его.
Итого
- x в записиодна цифра, одинаковая везде
- Диапазонот 0 до наименьшего основания − 1
- Перебор
int(s, q)илиvalue(ds, q) - Ответчто спросили: частное, x, значение
- Две цифрывложенные циклы и сравнение всех пар
- Примерx = 17, частное 648833380
Проверьте себя
Ответь сначала сам, потом открой ответ.
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
Практика
Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.
Цифра из десятичного алфавита
Операнды арифметического выражения записаны в системах счисления с основаниями 14 и 12: 5x7₁₄ + x3B₁₂. Переменной x обозначена неизвестная цифра из алфавита десятичной системы счисления. Определи значение x, при котором значение выражения кратно 20. Для найденного x вычисли частное от деления значения выражения на 20.
Введите число.
Подсказка
x — от 0 до 9, какими бы ни были основания.
Решение
«Цифра из алфавита десятичной системы» — это 0…9. Подходит только x = 7: сумма 2140, частное 2140 / 20 = 107.
def value(ds, q): v = 0 for d in ds: v = v * q + d return v for x in range(10): s = value([5, x, 7], 14) + value([x, 3, 11], 12) if s % 20 == 0: print(s // 20)Ответ: 107
2x3₇ + 1x4₇ делится на 6
Найди минимальную цифру x, при которой 2x3₇ + 1x4₇ делится на 6. В ответе укажи частное от деления суммы на 6.
Введите число.
Подсказка
x — цифра от 0 до 6; в ответ — частное.
Решение
2x3₇ + 1x4₇ = 154 + 14x. Делится на 6 при x = 1 и x = 4; наименьшая цифра — 1. Сумма 168, частное 168 / 6 = 28.
def value(ds, q): v = 0 for d in ds: v = v * q + d return v for x in range(7): s = value([2, x, 3], 7) + value([1, x, 4], 7) if s % 6 == 0: print(s // 6) breakОтвет: 28
Значение 2x7₄₀ при x = 33
Найди значение записи 2x7₄₀, если x — одна цифра со значением 33.
Введите число.
Подсказка
Цифра 33 — одна цифра с весом 40.
Решение
2x7₄₀ при x = 33: 2 · 40² + 33 · 40 + 7 = 3200 + 1320 + 7 = 4527.
def value(ds, q): v = 0 for d in ds: v = v * q + d return v print(value([2, 33, 7], 40))Ответ: 4527
7x3A₁₉ + 4Bx3₁₉ кратно 18
Операнды арифметического выражения записаны в системе счисления с основанием 19: 7x3A₁₉ + 4Bx3₁₉. В записи чисел переменной x обозначена неизвестная цифра из алфавита 19-ричной системы счисления. Определи наименьшее значение x, при котором значение выражения кратно 18. Для найденного x вычисли частное от деления значения выражения на 18 и укажи его в десятичной системе счисления.
Введите число.
Подсказка
A = 10, B = 11; наименьшее x — первое найденное при переборе по возрастанию.
Решение
Перебор x от 0 до 18 находит первое подходящее x = 8: сумма 82530 кратна 18. Частное 82530 / 18 = 4585.
def value(ds, q): v = 0 for d in ds: v = v * q + d return v for x in range(19): s = value([7, x, 3, 10], 19) + value([4, 11, x, 3], 19) if s % 18 == 0: print(s // 18) breakОтвет: 4585
Основание 41
Операнды арифметического выражения записаны в системе счисления с основанием 41: 6x29₄₁ + 1x07x₄₁. Переменной x обозначена неизвестная цифра из алфавита 41-ричной системы счисления. Определи наименьшее значение x, при котором значение выражения кратно 40. Для найденного x вычисли частное от деления значения выражения на 40.
Введите число.
Подсказка
При основании больше 36 int(s, q) не работает — считай значение списком цифр.
Решение
Цифры храним числами и считаем значение функцией value. Первое подходящее x = 5: сумма 3592680, частное 3592680 / 40 = 89817.
def value(ds, q): v = 0 for d in ds: v = v * q + d return v for x in range(41): s = value([6, x, 2, 9], 41) + value([1, x, 0, 7, x], 41) if s % 40 == 0: print(s // 40) breakОтвет: 89817
Три операнда в 23-ричной системе
Операнды арифметического выражения записаны в системе счисления с основанием 23: 5x18C3₂₃ + 2x7x₂₃ + 96x41₂₃. Переменной x обозначена неизвестная цифра из алфавита 23-ричной системы счисления. Определи наибольшее значение x, при котором значение выражения кратно 22. Для найденного x вычисли частное от деления значения выражения на 22.
Введите число.
Подсказка
Наибольшее x — последнее подходящее при переборе по возрастанию.
Решение
Подходят x = 2 и x = 13; наибольшее — 13. Сумма 38466252, частное 38466252 / 22 = 1748466.
def value(ds, q): v = 0 for d in ds: v = v * q + d return v for x in range(23): s = (value([5, x, 1, 8, 12, 3], 23) + value([2, x, 7, x], 23) + value([9, 6, x, 4, 1], 23)) if s % 22 == 0: answer = s // 22print(answer)Ответ: 1748466
2x1₆ + 1x3₈ делится на 5
Найди максимальную допустимую цифру x, при которой 2x1₆ + 1x3₈ делится на 5. В ответе укажи частное.
Введите число.
Подсказка
Цифра x должна подходить обоим основаниям: 6 и 8.
Решение
x стоит в шестеричной записи, поэтому x — от 0 до 5. Сумма 2x1₆ + 1x3₈ = 140 + 14x делится на 5 при x = 0 и x = 5. Наибольшая цифра — 5: (140 + 70) / 5 = 42.
def value(ds, q): v = 0 for d in ds: v = v * q + d return v for x in range(6): s = value([2, x, 1], 6) + value([1, x, 3], 8) if s % 5 == 0: answer = s // 5print(answer)Ответ: 42
1xy₄ + 2yx₅ делится на 7
Найди минимальное значение выражения 1xy₄ + 2yx₅, которое делится на 7. В ответе укажи частное.
Введите число.
Подсказка
Обе цифры есть в четверичной записи — они от 0 до 3.
Решение
Сумма 1xy₄ + 2yx₅ = 66 + 5x + 6y. Среди всех пар наименьшее кратное 7 значение — 77 при x = 1, y = 1. Частное 77 / 7 = 11.
def value(ds, q): v = 0 for d in ds: v = v * q + d return v best = Nonefor x in range(4): for y in range(4): s = value([1, x, y], 4) + value([2, y, x], 5) if s % 7 == 0 and (best is None or s < best): best = sprint(best // 7)Ответ: 11
Наименьшее значение, кратное 41
Операнды арифметического выражения записаны в системах счисления с основаниями 11 и 13: 3x6y₁₁ + y5x1₁₃. Переменными x и y обозначены допустимые в данных системах счисления неизвестные цифры. Определи значения x и y, при которых значение выражения будет наименьшим и кратно 41. Для найденных значений вычисли частное от деления значения выражения на 41.
Введите число.
Подсказка
Первая подходящая пара — не обязательно наименьшая сумма.
Решение
Сравниваем все пары: наименьшая сумма, кратная 41, — 10373 при x = 8, y = 2. Первая найденная пара x = 1, y = 10 дала бы 27019. Частное 10373 / 41 = 253.
def value(ds, q): v = 0 for d in ds: v = v * q + d return v best = Nonefor x in range(11): for y in range(11): s = value([3, x, 6, y], 11) + value([y, 5, x, 1], 13) if s % 41 == 0 and (best is None or s < best): best = sprint(best // 41)Ответ: 253
Наибольшее yx₃₈
В числе 4x1y7₃₈ переменные x и y обозначают некоторые цифры из алфавита системы счисления с основанием 38. Определи такие значения x и y, при которых число кратно 37, а число yx₃₈ имеет наибольшее возможное значение. В ответе запиши значение yx₃₈ в десятичной системе счисления.
Введите число.
Подсказка
В ответ — значение пары yx, а не самого числа.
Решение
Для каждой пары, при которой 4x1y7₃₈ кратно 37, считаем yx₃₈ и берём наибольшее: y = 37, x = 25, 37 · 38 + 25 = 1431.
def value(ds, q): v = 0 for d in ds: v = v * q + d return v best = 0for x in range(38): for y in range(38): if value([4, x, 1, y, 7], 38) % 37 == 0: best = max(best, value([y, x], 38))print(best)Ответ: 1431
yx₄₂ — полный квадрат
В числе 3x5y₄₂ переменные x и y обозначают цифры из алфавита системы счисления с основанием 42. Число кратно 41, а число yx₄₂ — ненулевой полный квадрат. Найди наибольшее такое значение yx₄₂ и запиши его в десятичной системе счисления.
Введите число.
Подсказка
Два условия: кратность числа и квадрат пары.
Решение
Подходят пары x = 22, y = 11 (yx = 484 = 22²) и x = 25, y = 8 (yx = 361 = 19²). Наибольшее значение — 484.
def value(ds, q): v = 0 for d in ds: v = v * q + d return v from math import isqrt best = 0for x in range(42): for y in range(42): yx = value([y, x], 42) if (value([3, x, 5, y], 42) % 41 == 0 and yx > 0 and isqrt(yx) ** 2 == yx): best = max(best, yx)print(best)Ответ: 484