【算法】最大公約數和最小公倍數求解

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章