反模数运算符

Mic*_*son 29 reverse modulus

在提出问题后3年多我找到了解决方案.我把它作为答案包括在内.

我有一个带有模数的表达式,需要按x来表示.

(a + x)mod m = b

我无法弄清楚如何处理模数.有没有办法自己获得x,或者我在这个上运气不好?

编辑:我意识到我可以得到多个答案,但我正在寻找一个在m范围内的答案.

Mic*_*son 21

我正在重新审视这个问题,并意识到这可能是基于@Gorcha给出的答案.

(a + x) mod m = b  
a + x = nm + b  
x = nm + b - a for some integer n
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我之前没有意识到这一点,但可以通过将n设置为0来导出解决方案.

然后我的问题的答案似乎是x = b - a,虽然在例子(26 + x) mod 29 = 3中结果是-23,小于m.为了使-23回到预期的范围,用29修改它,得到6.虽然在问题中未指定,但它给出的值介于0和m之间.

最终解决方案变为: x = (b - a) mod m

IE

(26 + x) mod 29 = 3
x = (3 - 26) mod 29
x = -23 mod 29
x = 6
Run Code Online (Sandbox Code Playgroud)

这使x在0到m的范围内.检查将显示(26 + 6) mod 29 = 3.

  • 从技术上讲,您不必将n设置为0.任何n似乎都有效.IE x =(nm + b - a)mod m将为任何整数n给出正确的x答案. (3认同)
  • `26x mod 29 = 3` 怎么样? (3认同)
  • 注意:"将n设置为0"对于某些问题是一个很好的假设.确切地说,考虑到nm为0是一个很好的假设,因为对于那些问题,nm可以被m整除. (2认同)

小智 11

你无法明确地找出x,但鉴于运算符的定义,我们可以进一步了解.

x mod y = z if x = ny + z for some integer n, where 0 <= z < y
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下:

(a + x) mod m = b
a + x = nm + b
x = nm + b - a for some integer n
Run Code Online (Sandbox Code Playgroud)


The*_*kle 6

是的。你完蛋了。

例子:

5 mod 3 = 2
8 mod 3 = 2
Run Code Online (Sandbox Code Playgroud)

所以逆模2是什么?8个还是5个?还是11?还是无穷无尽的其他数字?

Inverse mod 是一种关系,如果你试图追求这个,你就会开始学习更棘手的数学。如果您在 Haskell 中,您可以轻松地使用非确定性对其进行建模(无限的可能答案列表)

此外,这不是一个真正的编程问题。查看数学交流。