ЕГЭ 14. Позиционные системы счисления
Скачать 1.05 Mb.
|
Пример задания:Р-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. |