欧几里得算法及其证明

2022-04-24 16:47:55 浏览数 (1)

定义

forall a,bin mathbb{N},gcd(a,b)=gcd(b, a mod b)

证明

若$a<b$,则gcd(b,a mod b)=gcd(b,a)=gcd(a,b) 成立。

ageq b,设a=kcdot b r,其中0leq r<b,则r=a mod b

对于ab任意的公约数d ,

因为dmid a,dmid kcdot ba=q_1cdot d,kcdot b=q_2cdot d ,所以 a-kcdot b=d(q_1-q_2) ,故 dmid a-kcdot bdmid r

因此,d也是br的公约数。

反之:

对于br的任意公约数d

因为dmid b,dmid rb=q_1cdot d,r=q_2cdot d ,所以 kcdot b r=d(kcdot q_1-q_2) ,故 dmid kcdot b rdmid a

因此,d也是ab的公约数。

综上,ab的公约数集合与ba的公约数集合相同。于是它们的最大公约数自然也相等。

证毕

代码实现

复杂度O(log(a b))

递归方式

代码语言:c 复制
int gcd(int a,int b){
    return b?gcd(b,a%b):a;
}

迭代更新

代码语言:c 复制
int gcd(int a,int b){
    while(b){
        int r=a%b;
        a=b;
        b=r;
    }
    return a;
}

0 人点赞