在Java中使用欧几里德算法

时间:2016-05-24 16:37:33

标签: java algorithm modulus

如果我有x= 11y = 6,我想计算 (w*x)mod(y) = 1。换句话说,如何计算乘以11然后模数6得到的数字1.在这种情况下,w应该等于5。 无论如何我可以在java中使用欧几里德算法计算w? 谢谢!

1 个答案:

答案 0 :(得分:1)

有一个定理说线性同余a * x = b (mod n),其中a, bn是整数,当且仅当 {时才有的解决方案{1}}。

由于gcd(a, n) = 1,因为11是素数,所以你的等式确实可以解决。

要回答这个问题,不,你不能使用欧几里德算法求解线性同余 - 但是,你可以使用扩展欧几里德算法---来做到这一点,但你可以使用它,所以验证方程是可解的。

找到gcd(11,6) = 1后,您将解决方案计算为gcd(a,n)=1,其中x = b*r mod n。要计算r = a^-1 (mod n)的倒数,我们在此处表示a,您可以使用扩展欧几里德算法(缩写为EEA)。

如果r,则给定gcd(a,n)=1a的EEA会计算nrs。我们声称a*r + n*s = 1r modulo a的倒数。获得n后,即可计算r

这些算法在Cormen等人的算法导论一书中有很好的描述。