推广的euclid_欧几里得(Euclid)与拓展的欧几里得算法

欧几里得(Euclid)与拓展的欧几里得算法欧几里得算法原理欧几里得算法是一种快速计算最大公约数的算法,对于任意的两个数\((a,b)\),其最大公约数表示为\(gcd(a,b)\),根据欧几里得算法,\(gcd(a,b)=gcd(b,a\%b)\)。证明如下:如果\(b>a\),显然成立;因此只需考虑\(b对于\((a,b)\)的最大公约数\(g1=gcd(a,b)\),当然\(g1|a,...
摘要由CSDN通过智能技术生成

欧几里得(Euclid)与拓展的欧几里得算法

欧几里得算法

原理

欧几里得算法是一种快速计算最大公约数的算法,对于任意的两个数\((a,b)\),其最大公约数表示为\(gcd(a,b)\),根据欧几里得算法,\(gcd(a,b)=gcd(b,a\%b)\)。证明如下:

如果\(b>a\),显然成立;因此只需考虑\(b

对于\((a,b)\)的最大公约数\(g1=gcd(a,b)\),当然\(g1|a,g1|b\)(\(g1|a\)表示g1整除a),所以易知对于\(r=a-qb\),同样满足\(g1|r\);

又因为\(a\%b=r\),所以对于\(a,b\)的最大公约数g1,同样满足\(g1|a\%b,g1|b\),即\((b,a\%b)\)的最大公约数至少为\(g1\),即\(gcd(b,a\%b)>g1=gcd(a,b)\)。

反过来,对于\((b,a\%b)\)的最大公约数\(g2=gcd(b,a\%b)\),同样满足\(g2|a, g2|b\),即\(gcd(a,b)>g2=gcd(b,a\%b)\)。

因此\(gcd(a,b)=gcd(b,a\%b)\)证明成立。下面对该算法进行实现。

实现

#include

using namespace std;

int euclid(int a, int b)

{

if (b!=0)

{

return euclid(b, a%b);

}

else

{

return a;

}

}

int main()

{

int a(0),b(0);

cin >> a >> b;

cout << euclid(a,b);

return 0;

}

拓展的欧几里得算法

原理

拓展的欧几里得算法在密码学中有着重要的应用,现给出定理:

对正整数a,b;总是存在一组整数X,Y,使得\(Xa+Yb=gcd(a,b)\)成立,且\(gcd(a,b)\)为满足这种条件的最小整数。

这里不对该定理进行证明,欧几里得算法给出了在已知a,b

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值