算法题 - 最大公约数

求a和b的最大公约数:

1
2
Input : 319, 377
Output: 29

解法

采用欧几里德算法(又称辗转相除法),定理:gcd(a,b) = gcd(b,a mod b)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// 求最大公约数 Greatest Common Divisor
// 辗转相除法(欧几里德算法)
func gcd(a, b int) int {
	if a < b {
		return gcd(b, a)
	}
	for {
		remain := a % b
		if remain == 0 {
			return b
		}
		a = b
		b = remain
	}
}

版权

评论