反模运算符

46

在提问后的三年多时间里,我找到了解决方案。 我已将其作为答案包含在内。

我有一个带有模数的表达式,需要用 x 表示出来。

(a + x) mod m = b

我不知道该如何处理模数。 有没有办法让 x 单独出现,或者说这个问题无法解决?

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


你可以尝试使用中国剩余定理。查看此视频 - Leonidas
6个回答

36

我重新看了这个问题,并意识到根据@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


4
从技术上讲,你不需要将n设为0。任何n似乎都可以工作。例如,x=(nm+b-a) mod m 将为任何整数n给出正确的答案x。 - Michael Hogenson
3
26x mod 29 = 3 是什么意思? - Bugs Happen
1
这如何帮助解决在0到m范围内的x? - Michael Hogenson
哦,抱歉,我明白了。我不是完全确定。Wolfram Alpha说x = 29n + 28,其中n为整数,但我还没有弄清楚原因。 - Michael Hogenson
2
注意:对于某些问题,将“将n设置为0”是一个很好的假设。确切地说,考虑将nm视为0是一个好的假设,因为对于这种类型的问题,nm可被m整除。 - Manohar Reddy Poreddy
我知道这已经是两年后的事了。但正确的答案应该是 x = 29 * n + 6,其中 n in Z - KaZyKa

15

你无法确定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

7
嗯,你很遭罪了。
示例:
5 mod 3 = 2
8 mod 3 = 2

那么2的逆模是什么?8还是5?或者11?或者无限多个数字?

逆模是一种关系,如果你试图追求它,你会开始接触更棘手的数学问题。如果你在Haskell中,你可以使用非确定性(可能的答案的无限列表)来轻松地建模。

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


哈哈,刚看到你的编辑。我认为最后通过应用模数运算符丢失了太多信息了。这有点像事件视界。 - TheIronKnuckle
没错,我希望有比我更聪明的人能提供一个方便的解决方案,但在此之前我几乎已经自己得出了这个结论。谢谢你提到数学交换网站的提示,我今天才知道它的存在! - Michael Hogenson

2

我有一个反向模数方程

如果我们有

(var1 +var2) mod num=Res

然后获取

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

例如:25+5mod26=4

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

1

使用@Subhi Anyman的答案作为参考(稍作修改),如果我们有这个方程来反转模运算:

 (var1 + var2) mod num = Res

然后为了获取var1,我们使用以下代码。
var1 = num - ((Res - var2) * -1)
if (var1 > num) {
   var1 = var % num;          // making sure var1 is in range of 'num'
}

1

这个方程的棘手之处在于,即使你知道a、m和b,也不能确定x。

例如,假设你的方程是:

(2 + x) % 4 = 3

x 可以是 1、5、9、13 等。

这意味着你很不幸,没有办法让 x 单独存在。


除了我正在寻找范围在m内的值,所以只有1符合条件,因为5、9和13都超出了我要查找的范围。 - Michael Hogenson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接