Оператор Обратного Модуля

более 3 лет после того, как я задал вопрос, я нашел решение. Я включил его как ответ.

У меня есть выражение с модулем в нем, которое нужно поместить в терминах x.

(a + x) mod m = b

Я не могу понять, что делать с модулем. Есть ли способ получить x сам по себе, или мне не повезло в этом?

редактировать: Я понимаю, что могу получить несколько ответов, но я ищу для ответа, который попадает в диапазон m.

5 ответов


я пересматривал этот вопрос и понял, что это возможно на основе ответа @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 в ожидаемый диапазон mod его с 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.


вы не можете окончательно выяснить 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

да. ты облажался.

пример:

5 mod 3 = 2
8 mod 3 = 2

Итак, обратный мод 2-это что? 8 или 5? или 11? или бесконечность других чисел?

обратный мод-это отношение, вы начинаете переходить к более сложной математике, если пытаетесь преследовать это. Если вы в Haskell можно easilyish модель с не-детерминизм (бесконечный список возможных ответов)

кроме того, это не вопрос программирования. проверьте математический обмен.


хитрая часть этого уравнения заключается в том, что даже если вы знаете a, m и b, вы не можете окончательно выяснить x.

например, скажем, ваше уравнение было:

(2 + x) % 4 = 3

x смогло быть 1, 5, 9, 13 etc.

это означает, что вам не повезло, нет никакого способа получить x сам по себе.


у меня есть это уравнение для обратного модуля если у нас есть

(var1 +var2) mod num=Res

потом

var1= num-((Res-var2)*-1)

например 25+5mod26=4

var1=26-((4-5)*-1)
var1=26-1
var1=5