欧几里得算法和扩展的欧几里得算法

欧几里得算法:

首先,欧几里得算法就是来求两个数的最大公约数。

原理就是:设a>=b>=0 。

当b=0时,gcd(a,b)=a

当b>0时,gcd(a,b)=gcd(b,y)  a=b*q+y

所以求解最大公约数就是对这个过程进行迭代处理。

现在我们来写一下这个过程。

已知两个数的a ,b 。(a>b)求公约数的计算过程。

d=gcd(a,b) ,这个式子中的d就是就是这两个数的最大公约数。

设:a=qb+y   。 y就是a除以b的余数,

欧几里得算法就是对这一个过程进行迭代。

现在我们为了更好地表示计算的过程,我们把符号化成

a=y_{0} ,b=y_{1}

y_{0}=y_{1}*q_{1} +y_{2}

y_{1}=y_{2}*q_{2}+y_{3}

y_{2}=y_{3}*q_{3}+y_{4}

……

y_{n-2}=y_{n-1}*q_{n-1}+y_{n}

y_{n-1}=y_{n}*q_{n}

最后的那个y_n就是我们想要求的最大公约数。

扩展的欧几里得算法

在欧几里得算法中的那个商并不是没用的,在扩展的欧几里得算法里面那个商是非常有用的,它是欧几里得算法的关键。首先,我们在最大公约数表示定理里面有一个式子:

as+bt=d。

as_{i}+bt_{i}=y_{i}

扩展的欧几里得算法就是来求这个式子中的s和t。

由上面的扩展的欧几里得算法迭代的计算过程,我么可以得出

y_{n+1}=y_{n-1}- y_{n}*q_{n}

 所以可以得出

 s_0=1 ,s_1=0

s_{i+1}=s_{i-1}-s_{i}*q_{i}

t_0=0  ,t_1=1

t_{i+1}=t_{i-1}-t_{i}*q_{i}

在对上面的a*s_{i}+b*t_{i}=y_{i}进行验证。

a*s_{i}+b*t_{i}=a(s_{i-2}-s_{i-1}*q_{i-1})+b(t_{i-2}-t_{i-1}*q_{i-1}) =(a*s_{i-2}+b*t_{i-2})-(a*s_{i-1}+b*t_{i-1})*q_{i-1}=y_{i-2}-y_{i-1}*q_{i-1}=y_{i}

所以上面的s_i 和t_i 就是我们要求的s和t 。

现在我们用一个具体的例子来讲解一下这个算法。

假设36和16 ,gcd(36,16)=4

现在我们要来求解36*s+16*t=4。 我们要用扩展的欧几里得算法来求解s和t。

第一步:36=16*2+4

s_{2}=s_{0}-s_{1}*2=1-0*2=1

t_{2}=t_{0}-t_{1}*2=0-1*2=-2

第二步:16=4*4

余数为零时,迭代就停止了。

所以现在我们得出了我们所需要的s和t。

s=1,t=-2。36*1+16*(-2)=4

好了,验算成功。

我举的例子是一个比较简单的例子,只迭代了一次,有的话可能要迭代几次。

好了,扩展的欧几里得算法就这样。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

密码小丑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值