关于辗转相除法求最大公约数及其简单证明

辗转相除法的详细介绍在这里:http://zh.wikipedia.org/wiki/%E8%BC%BE%E8%BD%89%E7%9B%B8%E9%99%A4%E6%B3%95#.E8.B4.9D.E7.A5.96.E7.AD.89.E5.BC.8F


简单来说,就是两个数a跟b的最大公约数gcd(a,b) = gcd(b, a%b),当b=0时,gcd(a,b) = a。

举例来说:

gcd(18,30) = gcd(30, 18) = gcd(18, 12) = gcd(12, 6) = gcd(6, 0) = 6


那么,这个式子永远都是对的吗?我来简单证明一下:


1.首先,必然存在两种情况a>b和a<b,我们先考虑a<b的情况。此时,a%b=a,所以gcd(a,b) = gcd(b,a),这意味着我们只需要考虑a>b的情况。


2.由于该算法分两部分,我们需要单独证明其的正确性:

I.a,b均不为0时:

设a,b的x为a和b的任意一个公约数,则有:

a=a'x

b=b'x

则c=a%b=a-nb(其中n<a/b)=a'x-nb'x=x(a'-nb'),因为n<a/b=a'x/b'x=a'/b',所以n<a'/b'

我们有这个等式c=a%b=a-nb=a'x-nb'x=x(a'-nb'),其中a'为整数,nb'均为整数,且nb'<a,则a'-nb'为大于0的整数。所以:

x也是a%b的约数,也就是说,结论一:a跟b的任意一个公约数均为b跟a%b的公约数。


再设y为b和a%b的任意一个公约数,则用:

b=b'y

c=a%b=c'y

a=nb+c=nb'y+c'y=y(nb'+c'),又因为n,b',c'均为正整数,则可以得出,y为a的约数,且:

结论二:b跟a%b的任意一个公约数均为a跟b的公约数


综合结论一跟结论二: a,b跟b,a%b的公约数集合是一样的,则Z=gcd(a,b)为a,b公约数集合中最大的一个数,则Z肯定在b,a%b的公约数集合中,而且是最大的一个,所以Z=gcd(a,b) = gcd(b, a%b)


II.当b为0时(采用a[x],b[x]及a[x+1],b[x+1]表示父一代a,b及子一代a,b的关系):

当b[x]=0,则可说明a[x-1]%b[x-1]=0,说明a[x-1]是b[x-1]=a[x]的整数倍。显而易见,最后的a=a[x]为a[x-1],b[x-1]的最大公约数。


综上两部分证明,可以得知,辗转相除法求最大公约数是正确的偷笑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值