Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разложение числа, системы счисления 
:(
    Опции темы
stab
Дата 16.1.2008, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 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.
PM MAIL WWW   Вверх
baldina
Дата 16.1.2008, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



используя только целочисленное умножение и сложение\вычитание его можно представить в виде b^0*x1 + b^1*x2 + b^2*x3 ... b^(n - 1)*xn - сам же написал smile
а если надо разложить число, потребуется целочисленное деление и остаток.

i=0
while not (M = 0)
  Xi = M%b
  M = M / b
  i = i+1
end

если надо смоделировать деление и получение остатка - заменяй циклическим вычитанием. как только результат вычитания станет меньше вычитаемого, это и будет "остаток целочисленного деления"
PM MAIL   Вверх
maxim1000
Дата 16.1.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



хм... не уверен, что получится без деления

есть два алгоритма перевода чисел из одной системы в другую:
1. деление - все операции производятся в исходной системе: переводим в неё x/b и цепляем к рехультату x%b (b - основание целевой системы)
2. умножение - все операции производятся в целевой системе: рассматриваем аргумент, как x1*a^0+a2*a^1+...+xn*a^(n-1). только все операции производим в целевой системе, получая, соответственно, результат в ней же

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



--------------------
qqq
PM WWW   Вверх
stab
Дата 16.1.2008, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



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


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
baldina
Дата 16.1.2008, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



деление заменять вычитанием запрещено?
PM MAIL   Вверх
stab
Дата 16.1.2008, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



baldina, наверное я забыл написть что дано только M и b.

вообще, меня алгоритм не особо интересует, скорее интересует f(x) = A1 * ((x / 100) % 10) + A2 * ((x / 10) % 10) + A3 * (x % 10) выраженное без деления и желательно без деления по модулю. если это вообще возможно. smile

Добавлено через 4 минуты и 51 секунду
Цитата(baldina @  16.1.2008,  23:28 Найти цитируемый пост)
деление заменять вычитанием запрещено? 

ммм.. это как?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
baldina
Дата 16.1.2008, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Что-то не пойму я, прости.

Цитата

 f(x) = A1 * ((x / 100) % 10) + A2 * ((x / 10) % 10) + A3 * (x % 10)


Я так понимаю, здесь b=10 и M=f(x).
Но ты сказал, что b и M даны. Так что ты хочешь получить?

Добавлено через 1 минуту и 40 секунд
А если ты хочешь не f(x), а Аi для построение выражения для f, то Ai это Xi в алгоритме, что я привел

Добавлено через 5 минут и 40 секунд
не, все-таки не понимаю. если в твоей формуле А это цифра в i-й позиции, а x это M, то f(x)=x=M  smile 
PM MAIL   Вверх
stab
Дата 16.1.2008, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



An - заданные коэффициенты, на вход приходит х, максимум три знака в десятичной записи, его надо разложить на эти самые знаки и каждый умножить на соответствующий Ai, сложить и вернуть. беда в том, что мне надо не только вычислять это выражение, но и решить аналитически несколько уравнений в целых числах в которых оно фигурирует, если я туда деление введу они слишком сложные станут.

Добавлено через 1 минуту и 16 секунд
.. они и так уже не шибко простые. smile


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
baldina
Дата 16.1.2008, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



деление заменять вычитанием - это так: результат целочисленного деления a на b - число шагов при вычитании b из а, пока a > b
кстати конечное а - остаток деления

Код

11/5 :
1й шаг 11-5 = 6
2й шаг 6 - 5 = 1
1 < 5
число шагов 2, это и есть результат целочисленного деления, остаток - 1


вроде это в начальной школе проходят  smile 
PM MAIL   Вверх
stab
Дата 16.1.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



Цитата(baldina @  16.1.2008,  23:48 Найти цитируемый пост)
вроде это в начальной школе проходят  smile  

я было подумал, что есть божественный способ сделать это за фиксированное число шагов.



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
baldina
Дата 16.1.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



т.е. фактически тебе нужно вычисление типа ((x / 100) % 10) не используя деление и взятие остатка?

если аналитически, то в целых числах умножением не заменишь, а выражение для циклической разности тебя врядли обрадует больше...

Добавлено через 1 минуту и 24 секунды
не, божественных нет, увы. но если у тебя есть ограничение на число цифр - это и есть максимальное число шагов
PM MAIL   Вверх
stab
Дата 16.1.2008, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



Цитата(baldina @  16.1.2008,  23:52 Найти цитируемый пост)
т.е. фактически тебе нужно вычисление типа ((x / 100) % 10) не используя деление и взятие остатка?

да, и вринципе по барабану будет ли это верным разложением числа, главное чтобы загоняя в функцию все х от 0 до 999, можно  было получить все её возможные значения, необязательно в правильном порядке.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
baldina
Дата 16.1.2008, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 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) где-нить и сократится
PM MAIL   Вверх
stab
Дата 16.1.2008, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



Цитата(baldina @  16.1.2008,  23:52 Найти цитируемый пост)
но если у тебя есть ограничение на число цифр - это и есть максимальное число шагов 

хотелось бы фиксированное, чтобы аналитически можно было записать.

Добавлено через 1 минуту и 16 секунд
Цитата(baldina @  16.1.2008,  23:59 Найти цитируемый пост)
А если ты аналитически будешь решать свои уравнения, положив

g(x,n) = (x/10^n)%10 ?

не подходит такой вариант к сожалению.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
baldina
Дата 16.1.2008, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



а А1, А2 и А3 - составляющие пароля?  smile 
шутка

если ты введешь в своё выражение деление, выражение станет таким как и должно быть. пусть сложным. потом, возможно, сократится. а если нет - так и должно быть сложным.
но почему бы тебе в аналитических преобразованиях не использовать действительные числа, контролируя что ты всегда верно сможешь выделить целую часть?

Добавлено через 7 минут и 22 секунды
кстати, возможных значений f(x) будет гораздо меньше тысячи.
например при А=(1,2,3) 
f(321)=f(22)=10
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.