n > a > 0
有a、n,存在x、y,使得当gcd(a,n)=1时,得到xa+yn=1 => (xa+yn)mod(n) = 1
因为(yn)mod(n)=0 整理的到 (xa)mod(n) = 1
(xa)mod(n) = 1mod(n) 所以有 x = (a^-1)mod(n)
所以可由求 gcd(a,n) = 1 得到 xa+yn = 1 所以 可以得到 x,y
当x < 0 时 因为 (xa+yn)mod(n) = 1 == (xa+na+yn)mod(n) = 1 =>
(xa+na)mod(n) = 1 所以 ((x+n)*a)modn = 1 所以当 x < 0 时 x = x+n
例:
求 550^-1mod1769
先求是否有 gcd(550,1769) = 1
1769 = 550 * 3 + 119
550 = 119 * 4 + 74
119 = 74 * 1 + 45
74 = 45 * 1 + 29
45 = 29 * 1 + 16
29 = 16 * 1 + 13
16 = 13 * 1 + 3
13 = 3 * 4 + 1
出现有 1 = x * a + y * n 反向迭代
1 = 13 - 3 * 4
= 13 - ( 16 - 13 * 1 ) * 4 = 13 * 5 - 16 * 4
= ( 29 - 16 * 1 ) * 5 - 16 * 4 = 29 * 5 - 16 * 9
= 29 * 5 - ( 45 - 29 * 1 ) * 9 = 29 * 14 - 45 * 9
= ( 74 - 45 * 1 ) * 14 - 45 * 9 = 74 * 14 - 45 * 23
= 74 * 14 - ( 119 - 74 * 1 ) * 23 = 74 * 37 - 119 * 23
= ( 550 - 119 * 4 ) * 37 - 119 * 23 = 550 * 37 - 119 * 171
= 550 * 37 - ( 1769 - 550 * 3 ) * 171 = 550 * 550 - 1769 * 171
得到 1 = 550 * 550 - 1769 * 171
=> x = 550 , y = -171
所以 550^-1 mod 1769 = 550
记载_扩展欧几里得求模逆
最新推荐文章于 2024-07-29 15:51:01 发布