利用gcd(a,b) = gcd(a,a % b)其中a > b.
int gcd(a,b)
{
return b == 0? a : gcd(b,a % b);
}
这也是辗转相除法,可以证明:
假设gcd(a,b) = c,则a = mc,b = nc,且n、m互质
令a%b = r,则
r + x * nc = mc
=》r = (m - x*n)c
=》所以r也有c这个因子,由于m、n互质,所以n和m - x*n也互质(反证即可),所以gcd(b,r) = c,即gcd(b,a % b) = c,证毕。