реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Обратное соответствие (x*y) mod z, Как нибудь аналитечески можно ли?
alexPec
сообщение Jan 19 2011, 21:34
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Добрый день, Уважаемые. Туплю че-то, подскажите пожалуйста.
Такая задача: найти обратное соответствие функции a = (x*y) mod z.
Известно: a,y,z, надо найти x. Кроме того, z<<y и точно известно, что соответствие между a и х однозначное.
Можно ли как то аналитически вычислить x, зная a? Можно конечно через таблицу, вычислить прямое соответствие а потом обратное искать, но память тратить на таблицу неохота.

Спасибо.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 19 2011, 22:46
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (alexPec @ Jan 19 2011, 23:34) *
и точно известно, что соответствие между a и х однозначное
Вот этот момент подробнее осветите. Разве решением не будет бесконечное множество x?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jan 19 2011, 23:08
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(alexPec @ Jan 20 2011, 00:34) *
Такая задача: найти обратное соответствие функции a = (x*y) mod z.
Известно: a,y,z, надо найти x

Ответ: x = (n*z + a)/y, где n - любое натуральное число.
Проверка:
1) домножая обе части на y, получим:
x*y = n*z + a
2) берем модуль от обеих частей:
(x*y) mod z = (n*z+a) mod z = a
что совпадает c условием.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 20 2011, 07:27
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Xenia @ Jan 20 2011, 02:08) *
Ответ: x = (n*z + a)/y, где n - любое натуральное число.
Проверка:
1) домножая обе части на y, получим:
x*y = n*z + a
2) берем модуль от обеих частей:
(x*y) mod z = (n*z+a) mod z = a
что совпадает c условием.


Спасибо Xenia, осмылю - отпишусь.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 20 2011, 10:15
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



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

Чтоб было понятно о чем речь, это функция рандомизации последовательности от 0 до Z, упрощенный пример:

a=(x*13) mod 5

Соответствие такое, как видно однозначное (да, забыл упомянуть, 0<=x<z, х целое):

Х - а

0 - 0
1 - 3
2 - 1
3 - 4
4 - 2

Нужно по последовательности a восстановить последовательность Х

Че то даже на таком простом примере не соображу аналитическое решение обратной задачи.

Вопрос ставится уже так: имеет ли задача обратное решение (кроме табличного)?

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

Если мысли мои верны, то подскажите, возможно ли как-то решить обратную задачу без таблицы, ну или таблицу не размером 2 x Z, а поменьше делать?

И еще раз спасибо.
Go to the top of the page
 
+Quote Post
ucMike
сообщение Jan 20 2011, 11:40
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 21-11-08
Пользователь №: 41 832



Вычисляй по
Цитата(Xenia @ Jan 20 2011, 02:08) *
Ответ: x = (n*z + a)/y,

где n - любое целое число.

Для твоего примера: a=(x*13) mod 5
Код
int n;
for( n=0; n< 1000 /*Должен же быть какой-то предел */; n++)
{
    int temp;
    temp = n*5 + a;
    if( (temp % y) == 0 )
    {
        // Ответ
         printf("%d", temp / y);
         break;
     }    
}


Сообщение отредактировал ucMike - Jan 20 2011, 11:42
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Oldring
сообщение Jan 20 2011, 12:08
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(alexPec @ Jan 20 2011, 00:34) *
Такая задача: найти обратное соответствие функции a = (x*y) mod z.
Известно: a,y,z, надо найти x.


Алгоритм Евклида поможет.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jan 20 2011, 12:20
Сообщение #8


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(alexPec @ Jan 20 2011, 13:15) *
Соответствие такое, как видно однозначное (да, забыл упомянуть, 0<=x<z, х целое)


Забыли сказать? Да вы просто издеваетесь! Может быть у вас еще y тоже целое?
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 20 2011, 12:47
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Oldring @ Jan 20 2011, 15:08) *
Алгоритм Евклида поможет.

Спасибо.


Цитата
Забыли сказать? Да вы просто издеваетесь! Может быть у вас еще y тоже целое?

Ну я же говорю, туплю laughing.gif . А про у - да, тоже целое! biggrin.gif

2 ucMike : Перебором? А что, тоже вариант! Спасибо.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Jan 20 2011, 14:36
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(alexPec @ Jan 20 2011, 15:47) *
Спасибо.


А если y и z фиксированы и известны заранее, то умножьте a та обратный от y, всё по модулю z.
"Обратный от y" - это целочисленное решение уравнения 1 = (x * y) mod z


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
thermit
сообщение Jan 20 2011, 15:04
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата
Oldring:
"Обратный от y" - это целочисленное решение уравнения 1 = (x * y) mod z


Или y^-1 = y^(m-2) mod m (m - простое) 13^(5-2) mod 5 = 2

Следствие из малой теоремы ферма...
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 24 2011, 21:06
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Oldring, Thermit - ГОСПОДА, ВЫ МОНСТРЫ!!

В жизни бы не вспомнил эту теорему Ферма, и тем более не связал бы ее с этой задачей.
Все так как ВЫ, УВАЖАЕМЫЕ и написали, все работает.

ОГРОМНОЕ СПАСИБО!!!
Go to the top of the page
 
+Quote Post
-Al-
сообщение Feb 2 2011, 10:23
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



А решение такого уравнения никто не подскажет? sm.gif

x = ( y ^ 3 ) mod ( 2 ^ 160 )

Где:
x - известно, у - необходимо найти
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01466 секунд с 7
ELECTRONIX ©2004-2016