ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 1043
Скачиваний: 9
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
© К. Поляков, 2009-2022
14 (повышенный уровень, время – 3 мин)
Тема: Позиционные системы счисления.
Что проверяется:
Знание позиционных систем счисления.
1.4.1. Позиционные системы счисления.
1.1.3. Умение строить информационные модели объектов, систем и процессов в виде алгоритмов(?).
Что нужно знать:
-
принципы кодирования чисел в позиционных системах счисления -
ч тобы перевести число, скажем, 12345N, из системы счисления с основанием в десятичную систему, нужно умножить значение каждой цифры на в степени, равной ее разряду:
4 3 2 1 0 ← разряды
1 2 3 4 5N = 1·N4 + 2·N3 + 3·N2 + 4·N1 + 5·N0
-
последняя цифра записи числа в системе счисления с основанием – это остаток от деления этого числа на -
две последние цифры – это остаток от деления на , и т.д. -
число 10N записывается единица и N нулей: -
число 10N-1 записывается как N девяток: -
число 10N-10M = 10M · (10N-M – 1) записывается как N-M девяток, за которыми стоят M нулей: -
число 2N в двоичной системе записывается как единица и N нулей: -
число 2N-1 в двоичной системе записывается как N единиц: -
число 2N–2K при K < N в двоичной системе записывается как N–K единиц и K нулей: -
поскольку , получаем , откуда следует, что -
число 3N записывается в троичной системе как единица и N нулей: -
число 3N-1 записывается в троичной системе как N двоек: -
число 3N – 3M = 3M · (3N-M – 1) записывается в троичной системе как N-M двоек, за которыми стоят M нулей: -
можно сделать аналогичные выводы для любой системы счисления с основанием a:-
число aN в системе счисления с основанием a записывается как единица и N нулей: -
число aN-1 в системе счисления с основанием a записывается как N старших цифр этой системы счисления, то есть, цифр (a-1): -
число aN – aM = aM · (aN-M – 1) записывается в системе счисления с основанием a как N-M старших цифр этой системы счисления, за которыми стоят M нулей:
-
Пример задания:
Р-26. (демо-2023) Операнды арифметического выражения записаны в системе счисления с основанием 15.
123x515 + 1x23315
В записи чисел переменной x обозначена неизвестная цифра из алфавита 15-ричной системы счисления. Определите наименьшее значение x, при котором значение данного арифметического выражения кратно 14.
Для найденного значения x вычислите частное от деления значения арифметического выражения на 14 и укажите его в ответе в десятичной системе счисления. Основание системы счисления в ответе указывать не нужно.
Решение (Д. Кириенко):
-
Число записано в 15-ричной системе счисления, а в задаче спрашивается про делимость на 14. Это неспроста, т.к. число 15 при делении на 14 даёт остаток 1, более того, при делении любой степени числа 15 на 14 получится остаток 1 (математики говорят, что все степени числа 15 по модулю 14 равны 1). -
Поэтому по модулю 14 сумма чисел в 15-ричной системе счисления
123x5 + 1x233 ≡ 1 + 2 + 3 + x + 5 + 1 + x + 2 + 3 + 3 ≡ 20 + 2x = 6 + 2x (mod 14)
Это как признак делимости на 9 в 10-й системе счисления, такой же признак делимости на b-1 будет в системе счисления с основанием b: сумма цифр должна делиться на b-1. Думаю, именно это и имелось в виду авторами.
-
Тогда минимальное x, при котором 6 + 2x делится на 14, будет x = 4. -
Осталось ответ посчитать:
(int("12345", 15) + int("14233", 15)) / 14
(будем использовать "/", чтобы по виду ответа сразу было понятно, что делится нацело).
-
Ответ 8767.
Решение (И. Степанов):
-
запишем оба слагаемых в развернутой записи в системе счисления с основанием 15:
123x515 + 1x23315 =
(1·154+2·153+3·152+x·15+5) + (1·154+x·153+2·152+3·15+3) =
(2·154+2·153+5·152+ 3·15+8) + (x·153 +x·15)
= (101250 + 6750 + 1125 + 45 + 8) + x · (3375 + 15) = 109178 + 3390·x
-
нам нужно, чтобы выражение Y = 109178 + 3390·x делилось на 14 -
остаток от деления 109178 на 14 равен 6; остаток от деления 3390 на 14 равен 2 -
для того чтобы Y делилось на 14, остаток от деления Y на 14 должен быть равен 0 (14, 28 и т.д.) Попробуем сложить остатки. 6+2*x = 0, даст нам отрицательное значение x, значит нужно взять следующее значение остатка 6+2*x = 14 <=> 2*x = 8 <=> x =4. -
Y = 109178 + 3390·4 = 122738. В качестве ответа нужно поделить Y на 14, получим 8767 -
Ответ 8767.
Решение (электронные таблицы, П. Финкель):
-
запишем первое число 123x5 по цифрам; известные цифры – в колонки A B C E, а в колонке D перечисляем все 15-ричные цифры (0…14):
-
В колонке F записываем формулу: перевод 15-ричного числа в 10-ю систему: =A2*15^4+B2*15^3+C2*15^2+D2*15+E2
получаем в столбце F все варианты первого числа:
-
также по цифрам строим второе число 1x233:
=G2*15^4+H2*15^3+I2*15^2+J2*15+K2
-
в столбцах M, N и O считаем сумму двух чисел, остаток от деления на 14 и частное:
-
применяем фильтр к колонке Остаток (или просто ищем строки, где остаток = 0):
-
находим минимальное подходящее X = 4 и частное 8767 -
Ответ 8767.
Решение (программа на Python, И. Степанов):
-
полный текст программы:
for x in '0123456789ABCDE':
a = int('123'+x+'5', 15) + int('1'+x+'233', 15)
if a % 14 == 0:
print( 'x =', x,'Otvet:', a//14 )
break
-
Ответ 8767.
Решение (программа на Python, А. Гладков):
-
полный текст программы:
for x in range (15):
a = 1*15**4 + 2*15**3 + 3*15**2 + x*15 + 5
b = 1*15**4 + x*15**3 + 2*15**2 + 3*15 + 3
if (a+b) %14 == 0:
print( (a+b) // 14 )
break
-
Ответ 8767.
Решение (программа на C++, Л. Виноградова):
-
полный текст программы:
#include
#include
using namespace std;
int main() {
int x,a,b;
for(x=0;x<15;x++) {
a=1*pow(15,4)+2*pow(15,3)+3*pow(15,2)+x*15+5;
b=1*pow(15,4)+x*pow(15,3)+2*pow(15,2)+3*15+3;
if ((a+b)%14==0) {
cout<<(a+b)/14;
break;
}
}
}
-
Ответ 8767.
Решение (программа на С++, А. Родионов):
-
полный текст программы:
#include
#include
using namespace std;
unsigned long f(unsigned short int);
int main()
{
const unsigned short int d=14; // делитель
unsigned short int x;
for( x = 0; f(x) % d; x++ );
cout << f(x) / d;
return 0;
}
unsigned long f(unsigned short int x)
{
const unsigned short int Osn=15, n=5; // Основание системы
// счисления и разрядность чисел
unsigned long s=0;
// Массивы a и b с числами
unsigned short int a[n]{1,2,3,0,5},b[n]{1,0,2,3,3},i;
a[3] = b[1] = x; // Запись значения x в нужный разряд
for( i = 5; i; i-- )
s += a[n-i]*pow(Osn,i-1) + b[n-i]*pow(Osn,i-1);
return s;
}
-
Ответ 8767.