关于GCD欧几里得算法的证明过程:
证明一:
有两个数 a b
设这两个数的gcd(a,b) = g
那么假设其中比较大的数 a
a = k*b +r;
那么当我们对a求对b的最大公约数时
如果没有余数r 那么gcd 就等于b
那么现在有r了 所以gcd 的取值就取决于r了
因为现在我们来看r
r一定是个小于b的值
所以a和b的GCD问题就变成了我们现在求得就是r和b的GCD问题(r==0 那么就说明 GCD = b;r!=0 说明r对GCD有制约 需要考虑r和b的GCD )
那么问题回到了开始
现在的 a = b ; b = r;
做重复的操作
由于每次的r都会不断缩小
所以最后当我们再做a%b的时候为0 那么就说明我们得到了GCD = b;
那么为什么r一定是GCD的倍数
我们看
a=k1∗gcd
b=k2∗gcd
那么当较大的a=k3∗b+r
r=k3∗b+k1∗b
可知 r=k3∗k2∗gcd+k1∗gcd
可知r一定是GCD的倍数
所以我们继续用r和b继续求解GCD
最终可以求得最后的GCD大小
证明二:
还有一种证明我们可以这样来
a = k*b +r;
r = a mod b
设d 为 a和b的一个公约数 那么
d|a d|b 设r是a对b的余数r = a- k*b
那么d|r
所以d也是(b,a%b)的公约数
d|b , d|r, 由于a = k*b+r
所以d也是a和b的公约数 所以这个d有普遍性
(a,b)和(b,a mod b) 的公约数是一样的
其最大公约数相等