最大公約數
Gcd(m, n) = Gcd(n, m%n)
歐幾里德算法
歐幾里德算法又稱輾轉相除法,用於計算兩個整數a,b的最大公約數。其計算原理依賴於下面的定理:
定理:gcd(a,b) = gcd(b,a % b)
證明:a可以表示成a = kb + r,則r = a % b
假設d是a,b的一個公約數,則有
d|a, d|b,而r = a - kb,因此d|r
因此d是(b,a % b)的公約數
假設d 是(b,a % b)的公約數,則
d | b , d |r ,但是a = kb +r
因此d也是(a,b)的公約數
因此(a,b)和(b,a % b)的公約數是一樣的,其最大公約數也必然相等,得證
int Gcd(int m, int n)
{
if(n == 0)
return m;
else
return Gcd(n, m%n);
}
int Gcd(int m, int n)
{
int c;
while(m != 0)
{
c = m;
m = m % n;
n = c;
}
return n;
}