1. 程式人生 > >如何求最大公約數gcd

如何求最大公約數gcd

利用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,證畢。