概念:欧几里德算法,用于计算两个正整数a、b的最大公约数。
定理:gcd(a,b) = gcd(b,a % b) ----> (a>b而且a % b不为0)
证明:a表示为a = kb + r ,则r = a % b = a - kb
第一步:假如a和b的一个公约数为d,则有x=a整除d,y=b整除d;
第二步:因为r = a - kb,即r = xd - k(yd) = d(x - ky),所以d也是r的公约数;(注意:x - ky始终是>=0的,可以自己证明)
第三步:(a,b)的公约数 = (b,r)的公约数,即gcd(a,b) = gcd(b,a % b)。
实现
:
public int gcd(int a,int b){
while(b != 0){
int r = a % b;
a = b;
b = r;
}
return a;
}