如果我有x= 11
和y = 6
,我想计算
(w*x)mod(y) = 1
。换句话说,如何计算乘以11然后模数6得到的数字1.在这种情况下,w应该等于5。
无论如何我可以在java中使用欧几里德算法计算w?
谢谢!
答案 0 :(得分:1)
有一个定理说线性同余a * x = b (mod n)
,其中a, b
和n
是整数,当且仅当 {时才有的解决方案{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)=1
和a
的EEA会计算n
和r
,s
。我们声称a*r + n*s = 1
是r
modulo a
的倒数。获得n
后,即可计算r
。
这些算法在Cormen等人的算法导论一书中有很好的描述。