Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нахождение обратного элемента 
V
    Опции темы
turbanoff
Дата 20.5.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.4.2009

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



есть некое число a
нужно найти b -  обратный к нему по модулю 2^32
т.е. такое чтобы a*b = 1 mod (2^32)

перебором медленно...
расширенный алгоритм евклида даже не знаю как применить... модуль специфический
PM MAIL   Вверх
Mikl_
Дата 20.5.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 6
Всего: 14



Цитата(turbanoff)
перебором медленно...
, а не проще разделить 2^32 на некое число a и найти число b? smile 

PM MAIL   Вверх
turbanoff
Дата 20.5.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.4.2009

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



эм, ну во первых если делить то делить 2^32 + 1,
во вторых мы не получим обратное как таковое.
получим тока частное и остаток.
а для частного не факт что будет при умножении давать 1 по модулю 2^32
PM MAIL   Вверх
Akina
Дата 20.5.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Попробую сформулировать так, как я понял.

Для заданного a найти такое b, что (a*b) mod (2^32) = 1

Пусть (2^32) = a*k + m, причём m < a
Пусть b=k*x-y
Тогда a*b mod (2^32) = a*(k*x-y) mod (2^32) = (x*(a*k) - y*a) mod (2^32) = (x*m - y*a) mod (2^32) = 1
Осталось найти такую пару x и y, что x*m - y*a = 1
a и m нам известны, решение полученного уравнения в целых положительных x и y элементарно.

Можно доказать, что решение существует, если m>0 - само собой, это проверяется до начала расчёта.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
turbanoff
Дата 21.5.2009, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.4.2009

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



ну на самом деле не так элементарно, это раз
во 2-х как реализовать это на asm-e
PM MAIL   Вверх
Akina
Дата 21.5.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Цитата(turbanoff @  21.5.2009,  12:53 Найти цитируемый пост)
на самом деле не так элементарно

Элементарно, элементарно.

Цитата(turbanoff @  21.5.2009,  12:53 Найти цитируемый пост)
как реализовать это на asm-e 

А тебе часом не в Центр помощи надо было?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Mikl_
Дата 21.5.2009, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 6
Всего: 14



turbanoff
a * b = n*2^32 + 1
b = (n*2^32 + 1)/a
Код
.data
n dd 1
a dd заданное число
.code
a1:   mov edx,n
         mov eax,1; в паре регистров edx:eax число  n*2^32 + 1
         div a
         test edx,edx; если разделили нацело в edx ноль, а в eax искомое число b
         jz exit
         inc n; иначе увеличиваем n на 1 и продолжаем искать число b
         jmp a1
exit:  ; выводим значение b на экран или в файл
 smile 
PM MAIL   Вверх
turbanoff
Дата 21.5.2009, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.4.2009

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



алгоритм канечно хороший, но по сути тот же перебор, если взять к примеру
a = 0xefb1256d
то считает довольно долго...
а про 0xFE3ED1EF я вообще не говорю, ну это канечно я специально подобрал, но факт есть факт


Это сообщение отредактировал(а) turbanoff - 21.5.2009, 14:33
PM MAIL   Вверх
turbanoff
Дата 21.5.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.4.2009

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



Цитата

Попробую сформулировать так, как я понял.

Для заданного a найти такое b, что (a*b) mod (2^32) = 1

Пусть (2^32) = a*k + m, причём m < a
Пусть b=k*x-y
Тогда a*b mod (2^32) = a*(k*x-y) mod (2^32) = (x*(a*k) - y*a) mod (2^32) = (x*m - y*a) mod (2^32) = 1
Осталось найти такую пару x и y, что x*m - y*a = 1
a и m нам известны, решение полученного уравнения в целых положительных x и y элементарно.

Можно доказать, что решение существует, если m>0 - само собой, это проверяется до начала расчёта.


так, нашел в себе силы разобраться более или менее что тут написано.
тут такой вопрос: по ходу равенств a*k заменяется на m mod (2^32), 
что неверно, так как из
Цитата

(2^32) = a*k + m

следует что a*k = -m mod (2^32)

и честно я не представляю как решается такие уравнения в целых числах
Цитата

x*m - y*a = 1

мб ссылочку подкините?

Это сообщение отредактировал(а) turbanoff - 21.5.2009, 15:51
PM MAIL   Вверх
Akina
Дата 21.5.2009, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Цитата(turbanoff @  21.5.2009,  16:50 Найти цитируемый пост)
так, нашел в себе силы разобраться более или менее что тут написано.
тут такой вопрос: по ходу равенств a*k заменяется на m mod (2^32), 
что неверно

Есть смысл продолжить разбираться имхо... 

Цитата(turbanoff @  21.5.2009,  16:50 Найти цитируемый пост)
я не представляю как решается такие уравнения в целых числах

Реши-ка: найти минимальную пару целых положительных x и y такую, что 5x-3y=1... неужели ЭТО может представлять проблему??? ясно, что это 2 и 3... 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
turbanoff
Дата 21.5.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.4.2009

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



Цитата(Akina @ 21.5.2009,  16:24)
Цитата(turbanoff @  21.5.2009,  16:50 Найти цитируемый пост)
так, нашел в себе силы разобраться более или менее что тут написано.
тут такой вопрос: по ходу равенств a*k заменяется на m mod (2^32), 
что неверно

Есть смысл продолжить разбираться имхо... 

Цитата(turbanoff @  21.5.2009,  16:50 Найти цитируемый пост)
я не представляю как решается такие уравнения в целых числах

Реши-ка: найти минимальную пару целых положительных x и y такую, что 5x-3y=1... неужели ЭТО может представлять проблему??? ясно, что это 2 и 3...

ну понятно что в твоем описании ошибка, или как ты это можешь объяснить?
по поводу решения таких уравнений ничего кроме перебора в голову не приходит...
PM MAIL   Вверх
Akina
Дата 21.5.2009, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Цитата(turbanoff @  21.5.2009,  16:50 Найти цитируемый пост)
по ходу равенств a*k заменяется на m mod (2^32)

нет
Цитата(turbanoff @  21.5.2009,  16:50 Найти цитируемый пост)
a*k = -m mod (2^32)

какая-то бредоватая запись... mod - это операция, такая же как сложение или деление
а если имеется в виду a*k mod (2^32) = -m - так, во-первых, ЭТО не следует из моих записей, во-вторых, остаток от целочисленного деления не бывает отрицательным.
Цитата(turbanoff @  21.5.2009,  18:51 Найти цитируемый пост)
ну понятно что в твоем описании ошибка, или как ты это можешь объяснить?

ааа... ну раз понятно, так о чём мы тогда толкуем-то...




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
turbanoff
Дата 21.5.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.4.2009

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



Цитата

(x*(a*k) - y*a) mod (2^32) = (x*m - y*a) mod (2^32)


вот замена, a*k на m.

Хочу немного разъяснить (или наоборот запутать) по поводу mod, имеется в виду во
1-х: необходимо нахождение обратного элемента в кольце Z(n), n в данном случае равно 2^32.
по сути это тоже самое что 
Цитата

Для заданного a найти такое b, что (a*b) mod (2^32) = 1


mod имеется в виду не просто операция взятие по модулю, а обозначение равенства этих элементов в нашем кольце.
то есть например 33 = 49 mod 16

и -m = 2^32 - m mod (2^32), в этом нет ничего
Цитата

бредоватого
 

Это сообщение отредактировал(а) turbanoff - 21.5.2009, 18:20
PM MAIL   Вверх
Akina
Дата 21.5.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Цитата(turbanoff @  21.5.2009,  19:19 Найти цитируемый пост)
Хочу немного разъяснить 

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
turbanoff
Дата 21.5.2009, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.4.2009

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



ладно, забудь все что написал, вот задача:
Цитата

Для заданного a найти такое b, что (a*b) mod (2^32) = 1


как я понимаю основная твоя идея, взять во 1-х, найти 

k = (2^32) / a    (/ - целочисленное деление)
m = (2^32) - a*k            =>     a*k = (2^32) - m

далее b=k*x-y
Тогда a*b mod (2^32) = a*(k*x-y) mod (2^32) = (x*(a*k) - y*a) mod (2^32) = (x*((2^32) - m) - y*a) mod (2^32) = 1 

так как x*(2^32) = 0 mod (2^32)

то получаем:
-(x*m + y*a) mod (2^32) = 1

а вот дальше у меня даже нет идей что делать

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

Это сообщение отредактировал(а) turbanoff - 21.5.2009, 18:57
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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