反向模运算符(Reverse Modulus Operator)

2019-06-23 13:56发布

3年以上提出的问题后,我找到了解决办法。 我已经包括它作为一个答案 。

我与它模量,需要放在x的方面的表示。

(A + X)模m = B

我想不出什么用的模做。 有没有办法通过自身得到的x,还是我的运气就这一个?

编辑 :我知道我可以得到多个答案,但我找m的范围内,落在一个答案。

Answer 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,小于微米。 为了得到-23回到预期范围MOD将其与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

这使X在0〜m的范围内。 检查将显示(26 + 6) mod 29 = 3



Answer 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


Answer 3:

是的。 你完蛋了。

例:

5 mod 3 = 2
8 mod 3 = 2

所以逆MOD 2是什么? 8或5? 还是11? 或其他数字的无限?

反MOD是一种关系,你开始变得更加棘手的数学,如果你试图去追求这一点。 如果您在Haskell是你可以easilyish它与非决定论模型(可能的答案的无限名单)

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



Answer 4:

这个公式棘手的部分是,即使你知道,M和B,你不能决定性地计算出x。

例如,假设您的方程为:

(2 + x) % 4 = 3

X可以是1,5,9日,13等。

这意味着你的运气了,没有办法通过自身得到X。



Answer 5:

我有这样的公式来扭转模量,如果我们有

(var1 +var2) mod num=Res

然后让

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

例如25+5mod26=4

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


文章来源: Reverse Modulus Operator