反转功能的功能?

时间:2019-12-10 04:16:37

标签: math mod

我正在尝试解决这个问题:

(b(ax+b ) - c) % n = e 

x外,所有内容均已给出 我尝试了:

(A + x) % B = C
(B + C - A) % B = x

其中A(-c),然后根据我的其他子记录手动求解x,但是我没有得到正确的输出。我可能需要使用eea吗?任何帮助,将不胜感激!我知道有人问过这个问题,我尝试了他们的解决方案,但对我不起作用。

2 个答案:

答案 0 :(得分:4)

(b*(a*x+b) - c) % n = e

可以改写为:

(b*a*x) % n = (e - b*b + c) % n
x = ((e - b*b + c) * modular_inverse(b*a, n)) % n

其中u的{​​{3}} modular_inverse(u, n)是一个数字v,使得u*v % n == 1。有关计算模逆的代码,请参见modular inverse

一些警告:

  • 简化模块化方程式时,您永远不能简单地除法,而需要与模逆相乘。
  • 没有简单的公式来计算模逆,但是有一种简单,快速的算法来计算它,类似于计算this question
  • 模逆并不总是存在。
  • 根据编程语言,当一个或两个参数为负数时,取模的结果也可以为负数。
  • 由于每个解决方案都适用于每个xn,因此对于小n,只需测试从0n-1的数字,因此在许多情况下,一个简单的循环就足够了。

答案 1 :(得分:0)

您使用的是哪种语言,变量是否恒定? 这是确定Java中x可能值的快速方法:

for (int x = -1000; x < 1000; x++){
    if ((b*((a*x)+b) - c) % n == e){
    System.out.println(x);
    }
}