欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。
手写欧几里得函数:
int gcd(int a,int b)
{
return b==0 ? a : gcd(b,a%b);
}
关于欧几里得函数的证明:
设a,b 且a>b,a b均为整数
a=bq+r;其中r为余数
设a,b的最大公约数为U
a=xu b=yu
r=a-bq=xu-yuq=(x-yq)u
所以r(a%b 余数)可以被a,b的最大公约数u整除
设b,r的最大公约数为v
则 b=jv r=kv
又因为a=bq+r
=jvq+kv=(jq+k)v
所以a可以被v整除
总结:r可以被(a,b)的最大公约数u整除
a可以被整除(b,r)的最大公约数v整除
(整除:a能整除b,说明b是被除数,a是除数)
因为r<a所以
r与b的最大公约数一定等于a和b的最大公约数
此时的gcd(b,r)=gcd(a,b);
证毕