Я много читал об этом предмете, об алгоритме Евклида, и у меня есть все ссылки, необходимые для этого предмета, прямо здесь:
(Лучший источник для моего вопроса) -> Math Explanation
Еще один отличный пример -> Math Explanation 2 а>
Wiki -> Расширенный евклидов
Отличный ответ для добавления значений -> Добавить операцию
Тут я совсем запутался -> АФФИННЫЕ ШИФРЫ
Однако из всех этих источников я до сих пор не понимаю, как реализовать это с помощью кода (или псевдокода) или, по крайней мере, найти способ его написать.
Итак, я напишу основы, давайте предположим, что у меня есть эта формула:
(x * key) % mod = результат
0 ‹= X ‹= mod
0 ‹= ключ ‹= mod
0 ‹= результат‹= mod
key и mod являются константами.
* означает операцию умножения
% означает операцию остатка (отредактировано для уточнения)
x и результат являются динамическими.
Я хочу создать формулу, которая даст мне x через код на Java.
Функция, которая вычисляет для меня результат:
private int MultModulus(int num, int key, int mod)
{
return (num * key) % mod;
}
как найти Х? что я должен написать, чтобы рассчитать его? это тот момент, когда я не понял, давайте предположим, что моя сигнатура функции будет:
private int InverseMultModulus(int result, int key, int mod)
{
x = ...
return x;
}
%
— это оператор остатка, а не математическое представление вычисления по модулю. Вот для чего, например,Math#floorMod
. - person SomeJavaGuy   schedule 29.09.2015x
. Какой ты хочешь? - person John Bollinger   schedule 29.09.2015result == 1
,mod == 2
иkey == 3
,x
может быть любым положительным нечетным числом. - person Paul Boddington   schedule 29.09.2015key
делитmod
иresult
не кратноkey
. В более общем случае, еслиkey
иmod
не взаимно просты, то будет по крайней мере одно значение дляresult
, которому не соответствуетx
. В противном случае их может быть больше одного. - person John Bollinger   schedule 29.09.2015mod
. В этом случае вам нужно посмотреть на классBigInteger
. Предполагая, чтоresult
иkey
не имеют общих простых множителей сmod
, ответ (по модулюmod
) равенkey.modInverse(mod).multiply(result)
. - person Paul Boddington   schedule 29.09.2015