Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

Как определить основание системы счисления числа?

#математика #информатика #системы_счисления


118924 в 10 системе счисления = 350214 в х системе счисления, как найти х? если можно
то попродобнее    


Ответы

Ответ 1



Это ж всё брутфорс, это ж несерьезно :) На самом деле, конечно, перебор здесь вполне подходит, и можно дать ему границы сразу — по количеству цифр, по максимальной цифре. Но есть же и аналитический метод. 350214х = 11892410 Это означает, что 3x5 + 5x4 + 0x3 + 2x2 + 1x + 4 = 11892410 или 3x5 + 5x4 + 2x2 + x – 118920 = 0 Классический многочлен пятой степени. И теперь нужно просто решить полиномиальное уравнение. По основной теореме алгебры у него будет пять комплексных корней, нас, правда, интересует только действительный, хорошо бы положительный, и хорошо бы целый :) Из теоремы Абеля-Руффини известно, что аналитически мы такое уравнение не решим в общем случае, но я бы даже и пробовать не стал: на то придуманы численные методы, которых всяких есть многатыщ — выбрать можно по вкусу, начиная хоть с метода товарища Ньютона. Решаем, и получаем: x = 8 Хорошо и красиво. Ну можете еще добить преподавателя комплексными корнями, сказав, что это же число записывается точно так же в системе счисления с основанием (-7.07949 - 4.865i) :)

Ответ 2



Что бы перевести число с какой то системы счисления с основой Х в десятичную, нужно делать так: 1) начальная сумма 0 2) текущая цифра - самая первая 3) текущую сумму умножаем на основу Х 4) добавляем текущую цифру к сумме. 5) если справа ещё есть цифры - к пункту 3 иначе выход Так как вручную проверять все это лень, пишется небольшая программа, к примеру на питоне def r(x): return (((((3 * x + 5) * x + 0) * x + 2) * x + 1) * x + 4) for i in range(6,10): print i, r(i) Начинаем с 6, так как все цифры в заданном числе точно меньше 6 и это будет минимально возможная основа. А верхняя 9, так как "визуально" число в системе счисления Х больше его записи в десятичной форме. и конечный ответ - 8.

Ответ 3



Топовый ответ прекрасен. Осталось только уточнить решение. Итак, получено уравнение 3*x5 + 5*x4 + 2*x2 + x – 118920 = 0. И есть следующие соображения к его решению: x - основание системы счисления, т.е. целое число. В записи числа встречается цифра 5, т.е. x>5. Число в искомой системе счисления выглядит больше нежели в десятичной, т.е. x<10. Все целочисленные решения степенного уравнения являются делителями его свободного члена, и после проверки остаётся только x=8. Подстановка в уравнение показывает, что это ответ.

Ответ 4



Попробуй перебором. Начни с 6-ти разрядной системы счисления

Ответ 5



"Оптимизированный" перебор мог бы выглядеть так (Java): public static int getNotation(int decBased, int[] xBased) { outer: for (int base = 6; ; base++) { // как определить нижнюю границу вы уже знаете int tmp = decBased; int i = xBased.length - 1; while (tmp != 0) { int integral = tmp / base; int part = tmp % base; if (xBased[i] == part) { tmp = integral; i--; } else { continue outer; // отбрасываем основание, как только остаток от деления не равен соответствующей цифре чисда } } return base; } } Набросал по-быстрому и грязновато, но, наверно, суть понятна. Алгоритм основан на переводе числа в Википедии.

Комментариев нет:

Отправить комментарий