美文网首页
扩展欧几里得算法

扩展欧几里得算法

作者: 已不再更新_转移到qiita | 来源:发表于2018-12-16 03:39 被阅读10次

扩展欧几里得算法(Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)的扩展。已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y,使它们满足贝祖等式
ax+by=gcd(a,b)

演算过程

求二元一次不定方程 47x+30y=1 的整数解。

47=30*1+17 // y=1, x=1
30=17*1+13 //    
17=13*1+4 // 同上
13=4*3+1 // 同上

然后把它们改写成“余数等于”的形式

17=47*1+30*(-1)
13=30*1+17*(-1)
4=17*1+13*(-1)
1=13+4*(-3)

然后把它们“倒回去”

1=13+4*(-3)
1=13+[17*1+13*(-1)]*(-3)
1=17*(-3)+13*4
1= 17*(-3)+[30*1+17*(-1)]*4
1=30*4+17*(-7)
1=30*4+[47*1+30*(-1)]*(-7)
1=47*(-7)+30*11

求得 x=-7,y=11。

python

def ext_euclid(a, b):
     if b == 0:
         return 1, 0, a
     else:
         x, y, q = ext_euclid(b, a % b) # q = gcd(a, b) = gcd(b, a%b)
         x, y = y, (x - (a // b) * y)
         return x, y, q

参考:

https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm

相关文章

  • 扩展欧几里得算法

    资料 欧几里得算法 扩展欧几里得算法 扩展欧几里得算法应用 欧几里得算法 欧几里得算法用于求两个数的最大公约数 证...

  • 扩展欧几里得算法

    扩展欧几里得算法(Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)的扩展...

  • 算法学习(2)----丢番图方程

    之前一篇随笔"算法学习(1)----扩展欧几里得算法"记录了对朴素欧几里得算法和扩展欧几里得算法的学习和认识...

  • 扩展欧几里德算法

    扩展欧几里得算法(英语:Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)...

  • 组合数求解

    扩展欧几里得算法原理求解逆元的方法(本文采用扩展欧几里得算法进行求解)求组合数的两种方法Lucas定理

  • 扩展欧几里得算法

    欧几里得算法 文中用 表示求模运算, 表示整除, 比如 欧几里德算法(称辗转相除法),用于计算两个整数a, b的...

  • 扩展欧几里得算法

    扩展欧几里得算法 对于任意整数a,b,存在一对整数x,y,满足ax+by=gcd(a,b)。证明:当b=0时显然x...

  • (扩展)欧几里得算法

    又称辗转相除法,是指用于计算两个正整数a,b的最大公约数 (GCD, Greatest Common Diviso...

  • 欧几里得算法以及扩展

    最近要写RSA非对称加密算法,其中涉及到一些最大公约数的知识。 1 欧几里得基础算法 即辗转相除法,用于计算两个整...

  • GCD欧几里得算法 & EXGCD扩展欧几里得算法

    欧几里得算法欧几里得算法 (Euclidean algorithm) 是用来解决最大公约数问题的,通常采用辗转相除...

网友评论

      本文标题:扩展欧几里得算法

      本文链接:https://www.haomeiwen.com/subject/obozhqtx.html