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

Информатика 8 класс Босова ФГОС

§ 1.1. Системы счисления ГДЗ по Информатике 8 Класс


Какое минимальное основание имеет система счисления, если в ней записаны числа 123, 222, 111, 241? Определите десятичный эквивалент данных чисел в найденной системе счисления.

Ответ

Минимальным основанием может быть только 5. Так как самая большая цифра в используемых числах 4 (используемые цифры 0, 1, 2, 3, 4).

Десятичные эквиваленты данных чисел.

1235 = 1 ? 52 + 2 ? 51 + 3 ? 50 = 25 + 10 + 3 = 3810

2225 = 2 ? 52 + 2 ? 51 + 2 ? 50 = 50 + 10 + 2 = 6210

1115 = 1 ? 52 + 1 ? 51 + 1 ? 50 = 25 + 5 + 1 = 3110

2415 = 2 ? 52 + 4 ? 51 + 1 ? 50 = 50 + 20 + 1 = 7110


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

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()

Ответ – 7. 

Максимальная цифра 6, значит, в системе должны существовать цифры 0 1 2 3 4 5 6. 

Шестеричная система не подходит, нету 6 (в меньших, разумеется, тоже нету). А вот семеричная подходит! Там как раз цифры от 0 до 6.

Итак, мы доказали, что 7-чная система подходит, а меньшие нет. Поэтому 7 – наименьшее основание.

Формула для любого числа такова: находим максимальную цифру + 1 (работает по тому же принципу)

4,1 K

Комментировать ответ…Комментировать…

поэт, музыкант, математик, инженер, программист, котельщик, электрик, сантехник  · 31 окт 2021  ·

Могу предложить троичную систему счисления, в которой есть три цифры для записи чисел: 2, 3 и 6. В троичной системе с символами 0, 1 и 2 это было бы 102, а в десятичной число 11.

166

Комментировать ответ…Комментировать…

В данном случае минимальное основание – 7.
Алгоритм прост – находим в числе “старшую” цифру, в вашем случае это 6 и прибавляем 1 (за счет нуля).
Аналогично, минимальное основание для 110101 – 2
46475 – 8
110А345 – 11.

167

Комментировать ответ…Комментировать…

математик, патриот России, духовный последователь Циолковского  · 31 окт 2021

В данном случае это основание есть 7-минимальная система счисления здесь семиричная. Это следует из того, что мы первые 6 символов (цифр) для обозначения каких угодно предметных чисел задаём такими: 0,1,2,3,4,5,6 (в порядке возрастания-от меньшего к большему). Мы видим, что наибольшая из упомянутых цифр числа 326 суть 6, значит, подобно тому как мы в десятичной системе… Читать далее

1,1 K

Комментировать ответ…Комментировать…

О сообществе

Теги: Система счисления, перевод системы счисления, родственные системы счисления

Изменение основания для позиционных систем счисления

В позиционной системе счисления с основанием q число может быть представлено в виде полинома

… + a2∙q2+ a1q1 + a0∙q0 + a-1∙q-1 + a-2∙q-2 + …

где коэффициенты ai – это цифры системы счисления с основанием q.

Например, в десятичной системе счисления

124.733 = 1∙102 + 2∙101 + 4∙100 + 7∙10-1 + 3∙10-2 + 3∙10-3

Число цифр в системе счисления с основанием q равно q, при этом максимальная цифра равна q – 1. Цифра не может стать равной q, потому что в этом случае произойдёт перенос
единицы в новый разряд.

Например, нужно найти минимальное основание системы счисления, в которой записано число 7832. Так как максимальная цифра равна 8, то минимальное значение q = 8 + 1 = 9.

Основанием системы счисления может быть, в принципе, любой число: целое, отрицательное, рациональное, иррациональное, комплексное и т.д. Будем рассматривать только положительные целые основания.

Особый интерес для нас будут представлять основание 2 и основания, являющиеся степенью двойки – 8 и 16.

В случае, если основание с. с. больше десяти, то новые цифры берутся по порядку из алфавита. Например, для 16-ричной системы это будут цифры 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

Перевод целой части десятичной системы счисления

Первый способ перевода из десятичной системы счисления в n-ричную заключается в последовательном делении числа на новое основание.

12310 → X12

123/12 = 10 (3)
10/12 = 0 (10=A)

Собираем в обратном порядке, сначала последнее значение (это 0), потом сверху вниз все остатки. Получаем 0A3 = A3

456310 → X8

4563/8 = 570 (3)
570/8 = 71 (2)
71/8 = 8 (7)
8/8 = 1 (0)

Собираем обратно, получаем 10723

334910 → X16

3349/16 = 209 (5)
209/16 = 13 (1)
13/16 = 0 (13 = D)

Собираем вместе: 0D15 = D15

54510 → X2

545/2 = 272 (1)
272/2 = 136 (0)
136/2 = 68 (0)
68/2 = 34 (0)
34/2 = 17 (0)
17/2 = 8 (1)
8/2 = 4 (0)
4/2 = 2(0)
2/2 = 1 (0)
1/2 = 0(1)

Собираем 01000100001 = 1000100001

Перевод на бумаге обычно осуществляется делением в столбик. Пока деление не приведёт к нулю, каждый следующий ответ делится на основание с. с. В конце, из остатков от деления собирается ответ.

Перевод из десятичной системы счисления в двоичную на бумаге

Перевод из десятичной системы счисления в двоичную на бумаге

Также часто можно перевести число в другую с. с. , если в уме представить его как сумму степеней соответствующего основания, в которое мы хотим перевести число.

Например, 129 очевидно 128 + 1 = 27 + 1 = 100000012

80 = 81 – 1 = 34 – 1 = 10000 – 1 = 22223

Перевод в десятичную систему счисления целой части

Перевод осуществляется, используя представление числа в позиционной системе счисления. Пусть необходимо перевести A312 → X10
Известно, что A3 – это 3∙q0 + A∙q1, то есть 3*1 + A*12 = 3 + 120 = 123

107238 → X10

1∙q4 + 0∙q3 + 7∙q2 + 2∙q1 + 3∙q0 = 1∙84 + 0 + 7∙82 + 2∙8 + 3 = 1∙4096 + 7∙64 + 2∙8 + 3 = 4563

D1516 → X10

D∙162 + 1∙161+5∙160 = 13∙256 + 16 + 5 = 3349

10001000012 → X10

29 + 25 + 1 = 512 + 32 + 1 = 545.

Перевод на бумаге обычно осуществляется следующим образом. Над каждой цифрой по порядку пишут номер степени. Затем уже выписывают все слагаемые.

Перевод из шестеричной системы счисления в десятичную на бумаге

Перевод из шестеричной системы счисления в десятичную на бумаге

Перевод дробной части из десятичной системы

Во время перевода дробной части часто случается ситуация, когда конечная десятичная дробь превращается в бесконечную. Поэтому обычно при переводе указывается точность, с которой необходимо переводить.
Перевод осуществляется путём последовательного умножения дробной части на основание системы счисления. Целая часть при этом откидывается и входит в состав дроби.

0.62510 → X2

0.625 * 2 = 1.250 (1)
0.25 * 2 = 0.5 (0)
0.5 * 2 = 1.0 (1)

0 – дальнейшее умножение будет давать только нули

Собираем сверху вниз, получаем 0.101

0.310 → X2
0.3 * 2 = 0.6 (0)
0.6 * 2 = 1.2 (1)
0.2 * 2 = 0.4 (0)
0.4 * 2 = 0.8 (0)
0.8 * 2 = 1.6 (1)
0.6 * 2 = 1.2 (1)

0.2 … получим периодическую дробь

Собираем, получаем 0.0100110011001… = 0.0(1001)

0.64510 → X5
0.645 * 5 = 3.225 (3)
0.255 * 5 = 1.275 (1)
0.275 * 5 = 1.375 (1)
0.375 * 5 = 1.875 (1)
0.875 * 5 = 4.375 (4)
0.375 * 5 = 1.875 (1)
…

0.3111414… = 0.311(14)

Перевод дробной части в десятичную систему

Осуществляется аналогично переводу целой части, путём домножения цифры разряда на основание в степени, равной положению разряда в числе.

0.1012 → X10

1∙2-1 + 0∙2-2 + 1∙2-3 = 0.5 + 0.125 = 0.625

0.1345 → X10

1∙5-1 + 3∙5-2 +4∙5-3 = 0.2 + 3∙0.04 + 4∙0.008 = 0.2 + 0.12 + 0.032 = 0.352

Перевод из произвольной системы счисления в произвольную

Перевод из произвольной системы счисления в произвольную с. с. осуществляется с помощью десятичной с. с.

XN → XM ≡ XN → X10 → XM

Например

12212013 → X7

12212013 = 1∙36 + 2∙35 + 2∙34 + 1∙33 + 2∙32 + 1 = 729 + 2∙243 + 2∙81 + 27 + 9 + 1 = 141410

1414/7 = 202 (0)
202/7 = 28 (6)
28/7 = 4 (0)
4/7 = 0 (4)

40607

12212013 → 40607

Родственные системы счисления

Системы счисления называют родственными, когда их основания являются степенями одного числа. Например, 2, 4, 8, 16. Перевод между родственными системами счисления можно осуществлять, воспользовавшись таблицей

Таблица для перевода между родственными системами счисления с базой 2

10 2 4 8 16
0 0000 000 00 0
1 0001 001 01 1
2 0010 002 02 2
3 0011 003 03 3
4 0100 010 04 4
5 0101 011 05 5
6 0110 012 06 6
7 0111 013 07 7
8 1000 020 10 8
9 1001 021 11 9
10 1010 022 12 A
11 1011 023 13 B
12 1100 030 14 C
13 1101 031 15 D
14 1110 032 16 E
15 1111 033 17 F

Для перевода из одной родственной системы счисления в другую, сначала нужно перевести число в двоичную систему. Для перевода в двоичную систему счисления каждая
цифра числа подменяется на соответствующую двойку (для четверичной), тройку (для восьмеричной) или четвёрку (для шестнадцатеричной).

Для 1234 единица подменяется на 01, двойка на 10, тройка нa 11, получаем 110112

Для 57218 соответственно 101, 111, 010, 001, итого 1011110100012

Для E1216 получим 1110000100102

Для перевода из двоичной системы следует разбить число на двойки (4-я), тройки (8-я) или четвёрки чисел (16-я), а затем подменить на соответствующие значения.

1101001012 = 01.10.10.01.01 = 122114

1101001012 = 110.100.101 = 6458

1101001012 = 0001.1010.0101 = 1A516

Переход из одной родственной системы в другую осуществляется транзитом через наименьшее основание, в нашем случае через двойку.

332324 → X16

332324 → 11111011102 → 0011.1110.1110 → 3EE16

Понятно, что все эти рассуждения применимы и для систем счисления 3, 9, 21, 81 и 5, 25, 125 и т.п.

Q&A

Всё ещё не понятно? – пиши вопросы на ящик email

Тема 14.

Системы счисления

14

.

02

Нахождение основания системы счисления

Вспоминай формулы по каждой теме

Решай новые задачи каждый день

Вдумчиво разбирай решения

ШКОЛКОВО.

Готовиться с нами – ЛЕГКО!

Подтемы раздела

системы счисления

Решаем задачи

Напишите программу, которая решает уравнение 256x = 13910  . В ответе напишите найденное значение переменной
X  .

Показать ответ и решение

for i in range(7, 10): # начинаем перебор с 7, так как в записи числа 256 максимальное число - 6,
                       # а оно может присутствовать в любой системе счисления, которая больше 6
    if 2 * i ** 2 + 5 * i + 6 == 139:
        print(i)

Показать ответ и решение

def x_10_to_n(x, n):
 
    digits = []
 
    while x > 0:
 
        digits.append(x % n)
 
        x //= n
 
    digits.reverse()
 
    return digits
 

 for n in range(3, 10):
 
    if x_10_to_n(100, n)[-1] == 2 and 
 
            x_10_to_n(78, n)[-1] == 1:
 
        print(n)

Показать ответ и решение

for i in range(6, 100):
    if 2 * i ** 2 + 5 * i + 0 == 102:
        print(i)
        break

Решите уравнение: 1457 +x10 = 3315  .

Ответ запишите в десятичной системе счисления.

Показать ответ и решение

for i in range(100):
    if 1 * 7 * 7 + 4 * 7 + 5 + i == 3 * 5 * 5 + 3 * 5 + 1:
        print(i)

В системе счисления с некоторым основанием десятичное число 14 записывается в виде 20. Укажите это
основание.

Показать ответ и решение

Решение аналитически:

Пусть x – это основание искомой системы счисления, тогда из условия, что 20x = 14  следует 2 ⋅x = 14 ⇒ x = 7  .

Решение программой:

for x in range(2, 10):
    s = ’’
    n = 14
    while n != 0:
        s = str(n % x) + s
        n //= x
    if s == ’20’:
        print(x)

Укажите через пробел в порядке возрастания все основания систем счисления, в которых запись числа 13 оканчивается на
1.

Показать ответ и решение

Чтобы последняя цифра числа в n-ричной системе счисления числа 13 равнялась 1, нужно, чтобы остаток деления 13 на n
также равнялся 1. Переберём системы счисления от двоичной до 13-ричной.

for i in range(2, 13):
 
    if 13 % i == 1:
 
        print(i)

Показать ответ и решение

for i in range(3, 100):
    if 100 % i == 2 and 78 % i == 1:
        print(i)

Найдите основание системы счисления, в которой выполнено сложение: 251+ 63 = 334  .

Показать ответ и решение

for i in range(7, 36):
    if int(’251’, i) + int(’63’, i) == int(’334’, i):
        print(i)

Показать ответ и решение

def x_10_to_n(x, n):
 
    digits = []
 
    while x > 0:
 
        digits.append(x % n)
 
        x //= n
 
    digits.reverse()
 
    return digits
 
for x in range(6, 10):
 
    if x_10_to_n(102, x) == [2, 5, 0]:
 
        print(x)

Решите уравнение: 1457 +x10 = 3315  .

Ответ запишите в десятичной системе счисления.

Показать ответ и решение

def n_to_x_10(arr, n):
 
    x = 0
 
    for i in range(len(arr)):
 
        x += arr[i] * n ** (len(arr) – 1 – i)
 
    return x
 
a = [1, 4, 5]
 
b = [3, 3, 1]
 
print(n_to_x_10(b, 5) – n_to_x_10(a, 7))

В системе счисления с некоторым основанием десятичное число 14  записывается в виде 20  . Укажите это
основание.

Показать ответ и решение

Пусть x – это основание искомой системы счисления, тогда из условия, что 20x = 14  следует 2 ⋅x = 14 ⇒ x = 7  .

Показать ответ и решение

Решение 1

for i in range(2, 20):
    x = 25
    x_new = ’’
    while x > 0:
        x_new = str(x % i) + x_new
        x //= i
    if len(x_new) == 2 and x_new[-1] == ’4’:
        print(i)
        break

Решение 2

for i in range(2, 100):
    if i ** 2 > 25 >= i and 25 % i == 4:
        print(i)
        break

Определите число N  , для которого выполняется равенство 214N = 165N+1  .

Показать ответ и решение

Переведём оба числа в десятичную систему и решим уравнение:

2n2 + n + 4 = (n + 1)2 +6(n + 1)+ 5
n2 − 7n− 8 = 0
D = 49 + 32 = 81
x1 = 8
x2 = − 1

В ответ берем положительное число.

Значение арифметического выражения:

N 25 − 2⋅N 13 + 10

записали в системе счисления с основанием N  . Определите основание системы счисления, если известно, что сумма
разрядов в числе, представленном в этой системе счисления, равна 75  .

Показать ответ и решение

for n in range(2, 10):
    # Перебор начинаем с 2 т.к.
    # при делении на 1 получается бесконечный цикл
    s = n**25 - 2*n**13 + 10
    summ = 0
    while s > 0:
        summ += s % n
        s //= n
    if summ == 75:
        print(n)

В какой системе счисления число 1710  записывается как 101  ? В ответ запишите основание системы счисления.

В системе счисления с некоторым основанием десятичное число 14 записывается в виде 20. Укажите это
основание.

Показать ответ и решение

Требуется решить уравнение: 20x = 1410(2 ∗x + 0)10 = 1410,  откуда x = 7.

В системе счисления с некоторым основанием десятичное число 16 записывается в виде 10000. Укажите это
основание.

Показать ответ и решение

Требуется решить уравнение:

1610 = 10000x;16 = 1 ⋅x4,16 = x4  откуда x = 2.

В какой системе счисления число 32410   будет выглядеть как 100?   ?

Показать ответ и решение

Стоить заметить, что любое десятичное число A в n-ой степени можно записать как единицу и n нулей в
системе счисления с основанием A: An10 = 1000...000
        ◟  ◝◜n   ◞  A

Тогда 32410 =  182
           10   , значит в системе счисления с основанием 18 будет выглядеть как 10018   .

В какой системе счисления число 409610   будет выглядеть как 1000?   ?

Показать ответ и решение

Стоить заметить, что любое десятичное число A в n-ой степени можно записать как единицу и n нулей в
системе счисления с основанием A: An10 = 1000...000
        ◟  ◝◜n   ◞  A

Тогда 409610 =  163
            10   , значит в системе счисления с основанием 16 будет выглядеть как 100016   .

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