Как найти наименьшее основание числа

Формулировка задания: Укажите наименьшее основание системы счисления, в которой запись числа K-значна.

Задание входит в ЕГЭ по информатике для 11 класса под номером 16 (Кодирование чисел. Системы счисления).

Рассмотрим, как решаются подобные задания на примере.

Пример задания:

Укажите наименьшее основание системы счисления, в которой запись числа 70 трехзначна.

Решение:

Решим задачу методом подбора: будем перебирать основания системы счисления, начиная с наименьшего (2), и переводить число 70 в каждую из этих систем счисления:

В двоичной, троичной и четвертичной системах счисления в числе больше 3 цифр. А в системе счисления с основанием 5 их ровно 3.

Таким образом, наименьшее основание системы счисления равно 5.

Ответ: 5

Поделитесь статьей с одноклассниками «Укажите наименьшее основание системы счисления, в которой запись – как решать».

При копировании материалов с сайта ссылка на источник обязательна. Уважайте труд людей, которые вам помогают.
Нашли ошибку? Выделите текст и нажмите Ctrl + Enter.

Студворк — интернет-сервис помощи студентам

Всем привет! Нужно решить задачку на питоне. Важно, что списки использовать нельзя, функции тоже. “Половину” я уже сделал, определил основания обоих чисел. Дальше не могу без списков и функций. Вставляю свой код

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
s = input()
 
k = 0
 
i = 0
for char in s:
    if(i == 0):
        max = ord(char)
    i += 1
i = 0
for char in s:
    if(ord(char) > max):
        max = ord(char)
if max >= 49 and max <= 57:
    answ = max - 47
else:
    answ = max - 54
 
s1 = input()
 
k = 0
 
i = 0
for char in s1:
    if(i == 0):
        max1 = ord(char)
    i += 1
i = 0
for char in s1:
    if(ord(char) > max):
        max1 = ord(char)
if max1 >= 49 and max1 <= 57:
    answ1 = max1 - 47
else:
    answ1 = max - 54

Тут answ – основание первого числа, answ1 – второго числа. Почти на 100 процентов уверен в том, что работает))) Помогите, пожалуйста!
Условие задачи:

Не всякое число может являться записью в данной системе счисления. Например, 123 не может быть числом ни в двоичной, ни в троичной системе. Наименьшее основание системы счисления, в которой может быть записано это число – четыре.

Напишите программу, которая это и будет определять.

Вводятся два числа, записанных в разных, но неизвестных системах счисления. Для каждого из них нужно найти минимальное основание системы счисления, в которой это число может быть записано. Затем число в меньшей системе перевести в систему с большим основанием.

Гарантируется, что основания разные и не превышают 10.

Формат ввода
Два целых положительных числа.

Формат вывода
Целое число.

Пример 1
Ввод Вывод
123
214
102
Пример 2
Ввод Вывод
192
10010
18
Примечания
В задаче нельзя использовать списки, методы и функции.

Заранее спасибо.

Переведём все строки-числа в массивы со значениями их цифр. Запишем их задом-наперед. Более короткие дополним нулями:

A: 1A -> [10, 1]
B: 2  -> [ 2, 0]
C: 20 -> [ 0, 2]

Пройдемся слева направо имитируя сложение в столбик. Рассмотрим сумму младших разрядов: если бы переноса не возникло, то A[0] + B[0] == C[0]. Это не так (10 + 2 != 0). Значит есть перенос и A[0] + B[0] == base + C[0]. Можно вычислить основание системы счисления.

В следующем разряде нужно учесть пришедший перенос: A[1] + B[1] + carry == C[1]. Равенство выполнено, проверять основание не надо.

Продвигаясь по разрядам выполняем сложение в столбик. При каждом переносе проверяем основание – все переносы должны дать один результат. Кроме этого основание должно быть больше всех цифр в во всех трёх числах.

def read_number(s):
    alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    return list(map(alphabet.index, reversed(s)))


def align(lists):
    max_length = max(map(len, lists))
    for l in lists:
        l.extend([0] * (max_length - len(l)))


def determine_base(a, b, c):
    align((a, b, c))
    max_digit = max(a + b + c)
    base = None
    carry = 0
    for ai, bi, ci in zip(a, b, c):
        s = ai + bi + carry
        if s < ci:
            return -1
        if s > ci:
            if base is None:
                base = s - ci
                if base <= max_digit:
                    return -1
            if s - ci != base:
                return -1
            carry = 1
        else:
            carry = 0
    if carry != 0:
        return -1
    if base is None:
        return max_digit + 1
    return base

    
def main():
    a, b, c = tuple(map(read_number, input().split()))
    print(determine_base(a, b, c))


main()

Как решать задания данного типа из ЕГЭ по информатике?

Чему равно наименьшее основание позиционной системы счисления x,
при котором 225x = 405y, x и y – снования систем счисления?
Ответ записать в виде целого числа.

Встречал только задания, где в качестве неизвестной было основание только одной системы счисления. Пытался вводить функцию y(x) и делать через производную – не получилось. Правильный ответ для данной задачи: x = 8.


  • Вопрос задан

    более трёх лет назад

  • 5546 просмотров

Пригласить эксперта

225x = 2∙x2 + 2∙x + 5 = 4∙y2 + 5 = 405y
2∙x2 + 2∙x = 4∙y2
ymin = max(4, 0, 5) + 1 = 6
2∙x2 + 2∙x = 4∙62 = 144
x2 + x – 72 = 0
D = 1 + 4*72 = 289
x1 = -(1 + 17)/2 = -9
x2 = -(1 – 17)/2 = 8

P.S. Можно и в более общем виде:
2∙x2 + 2∙x = 4∙y2
x2 + x – 2∙y2 = 0
D = 1 + 8∙y2
x1 = -(1 + sqrt(1 + 8∙y2))/2
x2 = -(1 – sqrt(1 + 8∙y2))/2

638a0a0e41f04510b4178df55e54cbdf.jpg

Надеюсь, все достаточно понятно написал.


  • Показать ещё
    Загружается…

23 мая 2023, в 20:42

5000 руб./за проект

23 мая 2023, в 20:04

7000 руб./за проект

23 мая 2023, в 19:34

10000 руб./за проект

Минуточку внимания

Укажите наименьшее основание системы счисления, в которой запись десятичного числа 30 имеет ровно три значащих разряда.

Спрятать решение

Решение.

Составим уравнение для перевода числа 30_10 в n минус ричную систему счисления.

XYZ_n=X умножить на n в квадрате плюс Y умножить на n в степени 1 плюс Z умножить на n в степени 0 =30,

где X,Y,Z  — разряды числа в n минус ричной системе счисления, числа в промежутке  левая квадратная скобка 0,n правая круглая скобка .

Так как мы ищем наименьшее основание системы счисления, рассмотрим максимальные X, Y и Z, равные n минус 1. Перепишем уравнение: XYZ_n= левая круглая скобка n минус 1 правая круглая скобка умножить на n в квадрате плюс левая круглая скобка n минус 1 правая круглая скобка умножить на n в степени 1 плюс левая круглая скобка n минус 1 правая круглая скобка умножить на n в степени 0 =n в кубе минус 1=30. То есть, n в кубе =31. Будем искать не в точности n, ведь оно не будет натуральным, а n, близкие к решению этого уравнения. Возьмем наименьшее: n=3.

Переведем 30 в троичную систему счисления: 30_10=1010_3. Число четырёхзначно, это означает, что стоит взять систему счисления n=4.

Переведем 30 в четверичную систему счисления: 30_10=132_4, это число трёхзначно, следовательно, ответом к этой задаче будет 4.

Добавить комментарий