在“ xy + z≡0(mod k)”中求解x

时间:2018-08-25 16:07:09

标签: algorithm modulo

我需要在同余关系中求解x

  

xy + z≡0(mod k)

其中y,z和k是已知的。 (k可能不是素数。)

是否有比仅测试从0到k-1的所有值更好的算法?

我尝试使用数论,并得到了:

  

xy≡-z(mod k)
  x≡-z·(inverse(y)%k)(mod k)

但是在某些情况下我得到错误的结果。例如,如果k = 728,x = 272,y = 344,z = 344,则原始关系成立(因为272·344 + 344 = 129·728),但最后一个关系不成立。我在做什么错了?

1 个答案:

答案 0 :(得分:3)

您的解决方案失败是因为 The multiplicative inverse of “y modulo k” exists if and only if y and k are relatively prime (i.e., if gcd(y, k) = 1).在示例中,您选择yk不是互质的
这是解决问题的另一种方法

  

xy + z≡0(mod k)
xy≡-z(mod k)
xy≡-z + k(mod k)
  令k-z = b
  xy≡b(mod k)

现在,您只需要求解线性同余方程。
解决您给定的示例看起来像

  

x * 344 + 344≡0(mod 728)
x * 344≡-344(mod 728)
x * 344≡-344 + 728(mod k)
  x * 344≡384(mod 728)

首先通过简化来简化为x * 43≡48(mod 91),然后使用扩展的欧几里得算法来解决这个问题,将其形式为

  

90 + 91 * t
  x小于728的解:90、181、272、363、454、545、636、727。

这样,您可以找到x的所有可能解。