Оператор обратного модуля
Спустя 3 года после ответа на вопрос я нашел решение. Я включил его в качестве ответа.
У меня есть выражение с модулем в нем, которое нужно поместить в x.
(a + x) mod m = b
Я не могу понять, что делать с модулем. Есть ли способ получить x сам по себе, или мне не повезло на этом?
Изменить. Я понимаю, что могу получить несколько ответов, но я ищу ответ, который попадает в диапазон m.
Ответы
Ответ 1
Я пересматривал этот вопрос и понял, что это возможно, исходя из ответа @Gorcha.
(a + x) mod m = b
a + x = nm + b
x = nm + b - a for some integer n
Я не знаю, почему я этого раньше не понимал, но решение можно получить, установив n в 0.
Тогда ответ на мой вопрос будет x = b - a
, хотя в примере (26 + x) mod 29 = 3
результат равен -23, который меньше m. Чтобы получить -23 назад в ожидаемом диапазоне, измените его на 29, что дает 6. Хотя это не задано в вопросе, это дает значение между 0 и m.
Окончательное решение затем становится: x = (b - a) mod m
т.е.
(26 + x) mod 29 = 3
x = (3 - 26) mod 29
x = -23 mod 29
x = 6
Что помещает x в диапазон от 0 до m. На экране появится (26 + 6) mod 29 = 3
.
Ответ 2
Вы не можете окончательно определить x, но мы можем получить немного больше, учитывая определение оператора.
x mod y = z if x = ny + z for some integer n, where 0 <= z < y
Итак, в вашем случае:
(a + x) mod m = b
a + x = nm + b
x = nm + b - a for some integer n
Ответ 3
Угу. вы ввернуты.
Пример:
5 mod 3 = 2
8 mod 3 = 2
так обратный mod 2 - это что? 8 или 5? или 11? или бесконечность других чисел?
Обратный мод - это отношение, вы начинаете получать более сложную математику, если пытаетесь преследовать это. Если вы находитесь в haskell, вы можете легко представить его с помощью недетерминированности (бесконечный список возможных ответов)
Кроме того, это не вопрос программирования. проверить математический обмен.
Ответ 4
Сложная часть этого уравнения состоит в том, что даже если вы знаете a, m и b, вы не можете окончательно определить x.
Например, скажите, что ваше уравнение:
(2 + x) % 4 = 3
x может быть 1, 5, 9, 13 и т.д.
Это означает, что вам не повезло, нет способа получить x самостоятельно.
Ответ 5
У меня есть это уравнение, чтобы обратить вспять модуль
если мы имеем
(var1 +var2) mod num=Res
то для получения
var1= num-((Res-var2)*-1)
например. 25+5mod26=4
var1=26-((4-5)*-1)
var1=26-1
var1=5