fbpx
维基百科

扩展欧几里得算法

扩展欧几里得算法(英語:Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)的扩展。已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,找到整数x、y(其中一个可能是负数),使它们满足貝祖等式[1]如果a是负数,可以把问题转化成为a的绝对值),然后令

在欧几里得算法中,我们仅利用了每步带余除法所得的余数。扩展欧几里得算法还利用了带余除法所得的商,在辗转相除的同时也能得到貝祖等式[2]中的x、y两个系数。以扩展欧几里得算法求得的系数是满足裴蜀等式的最简系数。

另外,扩展欧几里得算法是一种自验证算法,最后一步得到的的含义见下文)乘以后恰为,可以用来验证计算结果是否正确。

扩展欧几里得算法可以用来计算模反元素(也叫模逆元),求出模反元素是RSA加密算法中获得所需公钥、私钥的必要步骤。

算法和举例

在标准的欧几里得算法中,我们记欲求最大公约数的两个数为 ,第 步带余除法得到的商为 ,余数为 ,则欧几里得算法可以写成如下形式:

 

当某步得到的 时,计算结束。上一步得到的 即为 的最大公约数。

扩展欧几里得算法在  的基础上增加了两组序列,记作  ,并令    ,在欧几里得算法每步计算 之外额外计算  ,亦即:

 

算法结束条件与欧几里得算法一致,也是 ,此时所得的  即满足等式 

下表以  为例演示了扩展欧几里得算法。所得的最大公因数是 ,所得贝祖等式 。同时还有自验证等式  

序号 i qi−1 余数 ri si ti
0 240 1 0
1 46 0 1
2 240 ÷ 46 = 5 2405 × 46 = 10 15 × 0 = 1 0 − 5 × 1 = −5
3 46 ÷ 10 = 4 464 × 10 = 6 04 × 1 = −4 1 − 4 × −5 = 21
4 10 ÷ 6 = 1 101 × 6 = 4 11 × −4 = 5 −5 − 1 × 21 = −26
5 6 ÷ 4 = 1 61 × 4 = 2 −41 × 5 = −9 21 − 1 × −26 = 47
6 4 ÷ 2 = 2 42 × 2 = 0 52 × −9 = 23 −26 − 2 × 47 = −120

這個過程也可以用初等變換表示。

 [3]

得到 

证明

由于  序列是一个递减序列,所以本算法可以在有限步内终止。又因为   的最大公约数是一样的,所以最终得到的   的最大公约数。

在欧几里得算法正确性的基础上,又对于  有等式 成立(i = 0 或 1)。这一关系由下列递推式对所有 成立:

 

因此  满足裴蜀等式,这就证明了扩展欧几里得算法的正确性。

实现

以下是扩展欧几里德算法的Python实现:

def ext_euclid(a, b): old_s, s = 1, 0 old_t, t = 0, 1 old_r, r = a, b if b == 0: return 1, 0, a else: while(r!=0): q = old_r // r old_r, r = r, old_r-q*r old_s, s = s, old_s-q*s old_t, t = t, old_t-q*t return old_s, old_t, old_r 

扩展欧几里得算法C++实现:

#include <bits/stdc++.h> using namespace std; int ext_euc(int a, int b, int &x, int &y) {  if (b == 0)  {  x = 1, y = 0;  return a;  }  int d = ext_euc(b, a % b, y, x);  y -= a / b * x;  return d; } int main() {  int a, b, x, y;  cin >> a >> b;  ext_euc(a, b, x, y);  cout << x << ' ' << y << endl;  return 0; } 

参考资料

  1. ^ 沈淵源. 數論輕鬆遊 (PDF). [2017-09-25]. (原始内容 (PDF)于2021-01-24) (中文(臺灣)). 
  2. ^ Kenneth H.Rosen; 徐六通 杨娟 吴斌 译. 离散数学及其应用 原书第七版. : 232页. ISBN 978-7-111-45382-6. 
  3. ^ 張慧玲. 介紹多項式帶餘除法的矩陣形式及其應用. 太原大學教育學院學報. 2014, (1): 第103–105頁. 

參考文獻

  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. 算法导论, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Pages 859–861 of section 31.2: Greatest common divisor.
  • Christof Paar,Jan Pelzl著 马小婷 译. 深入浅出密码学, 清华大学出版社, ISBN 9787302296096. Pages 151-155 6.3.2 扩展的欧几里得算法

外部連結

  • Source for the form of the algorithm used to determine the multiplicative inverse in GF(2^8) (页面存档备份,存于互联网档案馆

扩展欧几里得算法, 英語, extended, euclidean, algorithm, 是欧几里得算法, 又叫辗转相除法, 的扩展, 已知整数a, 可以在求得a, b的最大公约数的同时, 找到整数x, 其中一个可能是负数, 使它们满足貝祖等式a, displaystyle, 如果a是负数, 可以把问题转化成, displaystyle, left, right, displaystyle, left, right, 为a的绝对值, 然后令x, displaystyle, 在欧几里得算法中, 我们仅利用了每步带余. 扩展欧几里得算法 英語 Extended Euclidean algorithm 是欧几里得算法 又叫辗转相除法 的扩展 已知整数a b 扩展欧几里得算法可以在求得a b的最大公约数的同时 找到整数x y 其中一个可能是负数 使它们满足貝祖等式a x b y gcd a b displaystyle ax by gcd a b 1 如果a是负数 可以把问题转化成 a x b y gcd a b displaystyle left a right x by gcd a b a displaystyle left a right 为a的绝对值 然后令x x displaystyle x x 在欧几里得算法中 我们仅利用了每步带余除法所得的余数 扩展欧几里得算法还利用了带余除法所得的商 在辗转相除的同时也能得到貝祖等式 2 中的x y两个系数 以扩展欧几里得算法求得的系数是满足裴蜀等式的最简系数 另外 扩展欧几里得算法是一种自验证算法 最后一步得到的s i 1 displaystyle s i 1 和t i 1 displaystyle t i 1 s i 1 displaystyle s i 1 和t i 1 displaystyle t i 1 的含义见下文 乘以gcd a b displaystyle gcd a b 后恰为a displaystyle a 和b displaystyle b 可以用来验证计算结果是否正确 扩展欧几里得算法可以用来计算模反元素 也叫模逆元 求出模反元素是RSA加密算法中获得所需公钥 私钥的必要步骤 目录 1 算法和举例 2 证明 3 实现 4 参考资料 5 參考文獻 6 外部連結算法和举例 编辑在标准的欧几里得算法中 我们记欲求最大公约数的两个数为a b displaystyle a b 第i displaystyle i 步带余除法得到的商为q i displaystyle q i 余数为r i 1 displaystyle r i 1 则欧几里得算法可以写成如下形式 r 0 a r 1 b r i 1 r i 1 q i r i 且 0 r i 1 lt r i displaystyle begin aligned r 0 amp a r 1 amp b amp vdots r i 1 amp r i 1 q i r i quad text 且 quad 0 leq r i 1 lt r i amp vdots end aligned 当某步得到的r i 1 0 displaystyle r i 1 0 时 计算结束 上一步得到的r i displaystyle r i 即为a b displaystyle a b 的最大公约数 扩展欧几里得算法在q i displaystyle q i r i displaystyle r i 的基础上增加了两组序列 记作s i displaystyle s i 和t i displaystyle t i 并令s 0 1 displaystyle s 0 1 s 1 0 displaystyle s 1 0 t 0 0 displaystyle t 0 0 t 1 1 displaystyle t 1 1 在欧几里得算法每步计算r i 1 r i 1 q i r i displaystyle r i 1 r i 1 q i r i 之外额外计算s i 1 s i 1 q i s i displaystyle s i 1 s i 1 q i s i 和t i 1 t i 1 q i t i displaystyle t i 1 t i 1 q i t i 亦即 r 0 a r 1 b s 0 1 s 1 0 t 0 0 t 1 1 r i 1 r i 1 q i r i 且 0 r i 1 lt r i s i 1 s i 1 q i s i t i 1 t i 1 q i t i displaystyle begin aligned r 0 amp a amp r 1 amp b s 0 amp 1 amp s 1 amp 0 t 0 amp 0 amp t 1 amp 1 amp vdots amp amp vdots r i 1 amp r i 1 q i r i amp text 且 0 amp leq r i 1 lt r i s i 1 amp s i 1 q i s i t i 1 amp t i 1 q i t i amp vdots end aligned 算法结束条件与欧几里得算法一致 也是r i 1 0 displaystyle r i 1 0 此时所得的s i displaystyle s i 和t i displaystyle t i 即满足等式gcd a b r i a s i b t i displaystyle gcd a b r i as i bt i 下表以a 240 displaystyle a 240 b 46 displaystyle b 46 为例演示了扩展欧几里得算法 所得的最大公因数是2 displaystyle 2 所得贝祖等式为gcd 240 46 2 9 240 47 46 displaystyle gcd 240 46 2 9 240 47 46 同时还有自验证等式 23 2 46 displaystyle 23 2 46 和 120 2 240 displaystyle 120 2 240 序号 i 商 qi 1 余数 ri si ti0 240 1 01 46 0 12 240 46 5 240 5 46 10 1 5 0 1 0 5 1 53 46 10 4 46 4 10 6 0 4 1 4 1 4 5 214 10 6 1 10 1 6 4 1 1 4 5 5 1 21 265 6 4 1 6 1 4 2 4 1 5 9 21 1 26 476 4 2 2 4 2 2 0 5 2 9 23 26 2 47 120這個過程也可以用初等變換表示 240 46 1 0 0 1 10 46 1 0 5 1 10 6 1 4 5 21 4 6 5 4 26 21 4 2 5 9 26 47 displaystyle begin pmatrix 240 amp 46 1 amp 0 0 amp 1 end pmatrix rightarrow begin pmatrix 10 amp 46 1 amp 0 5 amp 1 end pmatrix rightarrow begin pmatrix 10 amp 6 1 amp 4 5 amp 21 end pmatrix rightarrow begin pmatrix 4 amp 6 5 amp 4 26 amp 21 end pmatrix rightarrow begin pmatrix 4 amp 2 5 amp 9 26 amp 47 end pmatrix 3 得到 9 240 47 46 2 displaystyle 9 times 240 47 times 46 2 证明 编辑由于0 r i 1 lt r i displaystyle 0 leq r i 1 lt r i r i displaystyle r i 序列是一个递减序列 所以本算法可以在有限步内终止 又因为r i 1 r i 1 r i q i displaystyle r i 1 r i 1 r i q i r i 1 r i displaystyle r i 1 r i 和 r i r i 1 displaystyle r i r i 1 的最大公约数是一样的 所以最终得到的r k displaystyle r k 是a displaystyle a b displaystyle b 的最大公约数 在欧几里得算法正确性的基础上 又对于a r 0 displaystyle a r 0 和b r 1 displaystyle b r 1 有等式a s i b t i r i displaystyle as i bt i r i 成立 i 0 或 1 这一关系由下列递推式对所有i gt 1 displaystyle i gt 1 成立 r i 1 r i 1 r i q i a s i 1 b t i 1 a s i b t i q i a s i 1 a s i q i b t i 1 b t i q i a s i 1 b t i 1 displaystyle r i 1 r i 1 r i q i as i 1 bt i 1 as i bt i q i as i 1 as i q i bt i 1 bt i q i as i 1 bt i 1 因此s i displaystyle s i 和t i displaystyle t i 满足裴蜀等式 这就证明了扩展欧几里得算法的正确性 实现 编辑以下是扩展欧几里德算法的Python实现 def ext euclid a b old s s 1 0 old t t 0 1 old r r a b if b 0 return 1 0 a else while r 0 q old r r old r r r old r q r old s s s old s q s old t t t old t q t return old s old t old r 扩展欧几里得算法C 实现 include lt bits stdc h gt using namespace std int ext euc int a int b int amp x int amp y if b 0 x 1 y 0 return a int d ext euc b a b y x y a b x return d int main int a b x y cin gt gt a gt gt b ext euc a b x y cout lt lt x lt lt lt lt y lt lt endl return 0 参考资料 编辑 沈淵源 數論輕鬆遊 PDF 2017 09 25 原始内容存档 PDF 于2021 01 24 中文 臺灣 Kenneth H Rosen 徐六通 杨娟 吴斌 译 离散数学及其应用 原书第七版 232页 ISBN 978 7 111 45382 6 引文使用过时参数coauthors 帮助 張慧玲 介紹多項式帶餘除法的矩陣形式及其應用 太原大學教育學院學報 2014 1 第103 105頁 參考文獻 编辑Thomas H Cormen Charles E Leiserson Ronald L Rivest and Clifford Stein 算法导论 Second Edition MIT Press and McGraw Hill 2001 ISBN 0 262 03293 7 Pages 859 861 of section 31 2 Greatest common divisor Christof Paar Jan Pelzl著 马小婷 译 深入浅出密码学 清华大学出版社 ISBN 9787302296096 Pages 151 155 6 3 2 扩展的欧几里得算法外部連結 编辑Source for the form of the algorithm used to determine the multiplicative inverse in GF 2 8 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title 扩展欧几里得算法 amp oldid 76184856, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。