1.概念:
-
最大公約數(Greatest Common Divisor,gcd)是數學詞彙,指能夠整除多個整數的最大正整數。而多個整數不能都爲零。例如8和12的最大公因數爲4。[維基百科]
-
最小公倍數(Least Common Multiple,lcm)是數論中的一個概念。若有一個數X,可以被另外兩個數A、B整除,且X大於(或等於)A和B,則X爲A和B的公倍數。所有正的公倍數中,最小的公倍數叫做最小公倍數。[維基百科]
2.求解最大公約數效率最高的當屬輾轉相除法(也叫歐幾里得法)
而求最小公倍數可以利用公式lcm = m*n/gcd
,這樣最便捷。
- 代碼示例如下
// 最大公約數:輾轉相除法
int gcd(int m, int n)
{
if (n==0) return m;
if (m<n)
return gcd(n, m);
int reminder = 0;
while (n!=0)
{
reminder = m%n;
m = n;
n = reminder;
}
return m;
}
// gcd recursively
int gcd_iterative(int m, int n)
{
return (n==0)?m:gcd_iterative(n, m%n);
}
// 最小公倍數:lcm=m*n/gcd;
int lcm(int m, int n)
{
if (m*n==0) return 0;
int gcd_num = gcd(m, n);
if (gcd_num>=1)
return (m*n/gcd_num);
}
相關複雜度討論可以參考ACM數論專題1——gcd與lcm https://codeantenna.com/a/raQ447c1CC