您的位置:首页 > 其它

欧几里德算法的证明

2016-07-08 14:46 211 查看
在学习算法的过程中,与欧几里德算法来了一次邂逅,于是又去学习了一下。。。

欧几里德算法又称辗转相除法,用于计算两个数的最大公约数。

定理:

设a=qb+r,其中a,b,q,r都是正整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a(modb))。

在网上看到的证明方法大多是这样:

a可以表示成a = kb + r(a,b,k,r皆为正整数),则r = a mod b

假设d是a,b的一个公约数,记作d|a,d|b,即a和b都可以被d整除。

而r = a - kb,两边同时除以d,r/d=a/d-kb/d=m,等式左边可知m为整数,因此d|r

因此d也是(b,a mod b)的公约数

因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证。

不过对于这个证明过程的最后两句结论有个疑问:

“因此d也是(b,a mod b)的公约数”这句没什么问题,但是同样也可以得到“d也是(a,a mod b)的公约数”。

而这个结论“因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等”就完全不知道是怎么得出的。。。

后面和老师沟通了一下,其实这个证明过程是有问题的。

“因此d也是(b,a mod b)的公约数”这个结论并不能得出“因此(a,b)和(b,a mod b)的公约数是一样的”。只能得出“如果d是(a,b)的公约数,那么也d是(b,a mod b)的公约数”的结论,如果d是(a,b)的最大公约数,但d不一定是(b,a mod b)的最大公约数。所以并不能证明“(a,b)和(b,a mod b)的公约数是一样的”。

完整的证明过程应该是这样:

a可以表示成a=kb+r(a,b,k,r皆<
4000
/span>为正整数;且a>b)

则r=amodb

假设d是a,b的一个公约数,为了方便,我们记d=(a,b)

则d|a,d|b,即a和b都可以被d整除。

而r=a−kb

两边同时除以d得到

r/d=a/d−kb/d

因为d|a,d|b,显然可以得到d|r

所以d是r的一个约数,因此d是(a,b,r)的公约数,即d=(a,b,r)

设A是(a,b)的公约数集,B是(b,r)的公约数集,R是(a,r)的公约数集

那么可以得到A⊆B,A⊆R

可见现在并不能得到(a,b)和(b,r)的公约数相同

只能说(a,b)的公约数是(b,r)公约数的一部分,同时也是(a,r)公约数的一部分

假设d′是(b,r)的公约数,则d′|b,d′|r; a=kb+r,等式两边都除以d′,可得

a/d′=(kb+r)/d′=kb/d′+r/d′ 因为d′|b,d′|r; 显然d′|a

所以如果d′=(b,r),那么在a=kb+r的情况下,d′也是a的约数,d′=(a,b,r)

因此(b,r)的约数集是(a,b)的约数集的一部分,也是(a,r)约数集的一部分 所以B⊆A,B⊆R 综上,A=B

由此得证,(a,b)的公约数与(b,r)的公约数相同,当然它们的最大公约数也必定相同。 即

            gcd(a,b)=gcd(b,r)

可见必须要满足两个条件才能得到(a,b)的公约数与(b,r)的公约数是相同的结论。

条件一:

假设d=(a,b),那么在a=qb+r的情况下,有 d=(b,r)

即证明A⊆B

条件二:

假设d=(b,r),那么在a=qb+r的情况下,有 d=(a,b)

即证明B⊆A

而网上的那个方法只是证明了条件一,所以并不能得出最后的结论。

在证明条件一的时候,也得到了d=(a,b),A⊆R

那么是否能得到A=R成立呢?

同样,我们也需要证明条件二是否成立,



“假设d=(a,r),那么在a=qb+r的情况下,有d=(a,b)”是否成立。

假设d=(a,r
4000
),则d|a,d|r

在a=qb+r等式两边同时除以d,得到

a/d=(qb+r)/d=qb/d+r/d

因为d|a,d|r,所以我们能得到d|qb成立,但是并不能得到d|b成立

因此,假设d=(a,r),那么在a=qb+r,且d|q时,才有d=(a,b)

显然这个没什么意义。。。

其实A=R是不成立的,大家可以试试证明一下,这里就不证明了。

另外还有另一种证明方法:

第一步:令c=gcd(a,b),则设a=mc,b=nc

第二步:可知r =a-kb=mc-knc=(m-kn)c

第三步:根据第二步结果可知c也是r的因数

第四步:可以断定m-kn与n互素【否则,可设m-kn=xd,n=yd,(d>1),则m=kn+xd=kyd+xd=(ky+x)d,则a=mc=(ky+x)dc,b=nc=ycd,故a与b最大公约数≥cd,而非c,与前面结论矛盾】

从而可知gcd(b,r)=c,继而gcd(a,b)=gcd(b,r),得证

—– 有的人活着,他已经死了,有的人死了,也不让人好好活,比如欧几里德、徐志摩。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息