![]() |
|
|
![]()
|
|
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
дурацкий вопрос, но как некоторое число M представить в виде b^0*x1 + b^1*x2 + b^2*x3 + ... + b^(n - 1)*xn, т.е. выразить в системе счисления с основанием b, используя только целочисленное умножение и сложение\вычитание?
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
используя только целочисленное умножение и сложение\вычитание его можно представить в виде b^0*x1 + b^1*x2 + b^2*x3 ... b^(n - 1)*xn - сам же написал
а если надо разложить число, потребуется целочисленное деление и остаток. i=0 while not (M = 0) Xi = M%b M = M / b i = i+1 end если надо смоделировать деление и получение остатка - заменяй циклическим вычитанием. как только результат вычитания станет меньше вычитаемого, это и будет "остаток целочисленного деления" |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
хм... не уверен, что получится без деления
есть два алгоритма перевода чисел из одной системы в другую: 1. деление - все операции производятся в исходной системе: переводим в неё x/b и цепляем к рехультату x%b (b - основание целевой системы) 2. умножение - все операции производятся в целевой системе: рассматриваем аргумент, как x1*a^0+a2*a^1+...+xn*a^(n-1). только все операции производим в целевой системе, получая, соответственно, результат в ней же на первый взгляд, достаточно просто использовать алгоритм умножения но проблема в том, что для этого нужна арифметика в целевой системе, а для неё, если я не ошибаюсь, необходима операция деления хотя бы на основание или аналогичные действия (как, например, сдвиг в двоичной системе) -------------------- qqq |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
в крайнем случае по модулю можно делить, т.е. находить остаток от деления, но само деление нельзя использовать.
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
деление заменять вычитанием запрещено?
|
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
baldina, наверное я забыл написть что дано только M и b.
вообще, меня алгоритм не особо интересует, скорее интересует f(x) = A1 * ((x / 100) % 10) + A2 * ((x / 10) % 10) + A3 * (x % 10) выраженное без деления и желательно без деления по модулю. если это вообще возможно. Добавлено через 4 минуты и 51 секунду ммм.. это как? -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
Что-то не пойму я, прости.
Я так понимаю, здесь b=10 и M=f(x). Но ты сказал, что b и M даны. Так что ты хочешь получить? Добавлено через 1 минуту и 40 секунд А если ты хочешь не f(x), а Аi для построение выражения для f, то Ai это Xi в алгоритме, что я привел Добавлено через 5 минут и 40 секунд не, все-таки не понимаю. если в твоей формуле А это цифра в i-й позиции, а x это M, то f(x)=x=M |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
An - заданные коэффициенты, на вход приходит х, максимум три знака в десятичной записи, его надо разложить на эти самые знаки и каждый умножить на соответствующий Ai, сложить и вернуть. беда в том, что мне надо не только вычислять это выражение, но и решить аналитически несколько уравнений в целых числах в которых оно фигурирует, если я туда деление введу они слишком сложные станут.
Добавлено через 1 минуту и 16 секунд .. они и так уже не шибко простые. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
деление заменять вычитанием - это так: результат целочисленного деления a на b - число шагов при вычитании b из а, пока a > b
кстати конечное а - остаток деления
вроде это в начальной школе проходят |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
я было подумал, что есть божественный способ сделать это за фиксированное число шагов. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
т.е. фактически тебе нужно вычисление типа ((x / 100) % 10) не используя деление и взятие остатка?
если аналитически, то в целых числах умножением не заменишь, а выражение для циклической разности тебя врядли обрадует больше... Добавлено через 1 минуту и 24 секунды не, божественных нет, увы. но если у тебя есть ограничение на число цифр - это и есть максимальное число шагов |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
да, и вринципе по барабану будет ли это верным разложением числа, главное чтобы загоняя в функцию все х от 0 до 999, можно было получить все её возможные значения, необязательно в правильном порядке. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
А если ты аналитически будешь решать свои уравнения, положив
g(x,n) = (x/10^n)%10 ? т.е. f(x) = A1 * g(x,2) + A2 * g(x,1) + A3 * g(x,0) упростить тут не получится, но само выражение выглядит не так страшно, а в результате возможно g(x,a)/g(x,b) где-нить и сократится |
|||
|
||||
| stab |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
хотелось бы фиксированное, чтобы аналитически можно было записать. Добавлено через 1 минуту и 16 секунд
не подходит такой вариант к сожалению. -------------------- 6, 6, 6 - the number of the beast. |
||||
|
|||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
а А1, А2 и А3 - составляющие пароля?
шутка если ты введешь в своё выражение деление, выражение станет таким как и должно быть. пусть сложным. потом, возможно, сократится. а если нет - так и должно быть сложным. но почему бы тебе в аналитических преобразованиях не использовать действительные числа, контролируя что ты всегда верно сможешь выделить целую часть? Добавлено через 7 минут и 22 секунды кстати, возможных значений f(x) будет гораздо меньше тысячи. например при А=(1,2,3) f(321)=f(22)=10 |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |