Reverse Modulus Operator

I was revisiting this question and realized it is possible based off of the answer @Gorcha gave.

(a + x) mod m = b  
a + x = nm + b  
x = nm + b - a for some integer n

I don't know why I didn't realize it before but the solution can be derived by setting n to 0.

The answer to my question then appears to be x = b - a, though in the example (26 + x) mod 29 = 3 the result is -23, which is less than m. To get -23 back in the expected range mod it with 29, which gives 6. While not specified in the question this gives a value between 0 and m.

The final solution then becomes: x = (b - a) mod m

I.E.

(26 + x) mod 29 = 3
x = (3 - 26) mod 29
x = -23 mod 29
x = 6

Which puts x in the range of 0 to m. Checking will show (26 + 6) mod 29 = 3.


yep. you're screwed.

example:

5 mod 3 = 2
8 mod 3 = 2

so inverse mod 2 is what? 8 or 5? or 11? or an infinitude of other numbers?

Inverse mod is a relation, you start to get to more tricky mathematics if you try to pursue this. If you're in haskell you could easilyish model it with non-determinism (an infinite list of possible answers)

Also, this isn't really a programming question. check out math exchange.


You can't definitively figure out x, but we can get a bit further given the definition of the operator.

x mod y = z if x = ny + z for some integer n, where 0 <= z < y

So in your case:

(a + x) mod m = b
a + x = nm + b
x = nm + b - a for some integer n

I have this Equation to reverse the modulus if we have

(var1 +var2) mod num=Res

then to get

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

e.g. 25+5mod26=4

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