欧几里得算法(求解最大公约数的优质方法)以及原理拓展

博客主要围绕欧几里得算法展开,阐述其可求解最大公约数,指出gcd(a,b)=gcd(b,a%b),普通公约数也有此性质。通过引理证明和正反向推导证明了cd(a,b)=cd(b,a%b),还给出求解最大公约数代码,并对原理进行一般化拓展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:仅个人小记。欧几里得算法提供了求解最大公约数的方法,而求解最大公约数是十分有意义的,因为当两个数的最大公约数为1的时候,这两个数就是互质的,即gcd(a,b)=1 等价于 a与b互质,而互质这个性质在数论中则是非常重要

结论交代

欧几里得算法(Eculidean Algorithm)指明:a,b最大公约数(Greatest Common Divisor),就等于b,a%b的最大公约数,公式如下

gcd(a,b)=gcd(b,a%b)gcd(a,b) = gcd(b,a \% b)gcd(a,b)=gcd(b,a%b)

但实际上,不仅仅是最大公约数,普通的公约数(Common Divisor)也吻合上面情况,即有cd(a,b)=cd(b,a%b)cd(a,b)=cd(b,a\%b)cd(a,b)=cd(b,a%b)
所以,上述最大公约数的性质只是普通公约数的一个特例

引理证明

如果 (a + b) % d = 0,b % d = 0,则必然有 a % d = 0。
证明如下
因为(a + b) % d = 0 ,b % d = 0,
所以可以令 a + b = kd , b = k’ d, 其中k 和 k’ 都是整数。
进而,a + b = kd ----> a + k’d = kd -----> a = (k-k’)d, a 是 d 的整数倍,进而必有 a % d = 0,证毕。

证明过程

cd(a,b)=cd(b,a%b)cd(a,b)=cd(b,a\%b)cd(a,b)=cd(b,a%b)
a = kb + r,则有 r = a - kb,

正向

若 d 是 a , b的公约数有,则必有 a % d = 0 以及 b % d = 0,进而必有 r % d = 0,所以显然 d 也是 b, r 的公约数

反向

若 d 是 b, r 的公约数, 则必有 a % d = 0 以及 r % d = 0, b %d= 0 以及 (a - kb) % d=0,借助上述引理证明,进而必有 a % d = 0。

综述

d 是 a, b 的公约数,则 d 必然是 b, r 的公约数; d 是 b, r 的公约数, 则 d 必然是 a, b 的公约数; a, b 的公约数必然是 b, r 的公约数, cd(a,b)=cd(b,r)=cd(b,a%b)cd(a,b)=cd(b,r) = cd(b,a\%b)cd(a,b)=cd(b,r)=cd(b,a%b),示意如下图

证毕。

讨论
  1. 故而,求 a,b 公约数问题就等价于求 b, r 公约数问题, 进而求 a,b 最大公约数问题等价于求 b, r 最大公约数问题,即gcd(a,b)=gcd(b,a%b)gcd(a,b) = gcd(b,a \% b)gcd(a,b)=gcd(b,a%b)
    用欧几里得算法求解最大公约数的代码如下:
int gcd(int a, int b){
    if (b == 0) return a;
    return gcd(b,a%b);
}
原理一般化拓展
  1. 以上对欧几里得算法的证明,同时也就是对 “如果a⊥ba\perp bab,则必然有 a+kb⊥ba+kb \perp ba+kbb” 的证明。这个公式更有一般化的原理意义,而以上欧几里得算法只是具体为余数 r与模数 b互质的证明 ,即证明 r = a - kb 与 b 互质。显然,r = a - kb 只是归属于 a+kb 的一种表达,故而可以直接得证。该原理如下图所示,
谢谢支持!
邮箱: officeforcsdn@163.com
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值