这是用来求最大公约数的算法。
算法过程:
求a,b的最大公约数,假设a>b;
取m=a%b,a=b,b=m;
重复上述过程知道m=0,此时的b就是最大公约数。
原理:
例如,求1112和695的最大公约数。假设最大公约数为n
,那么1112和696分别可以看成是i
和j
个n
。
这里需要证明a、b的最大公约数和b、m的最大公约数相同。
基于以上假设, a = i × n a=i \times n a=i×n, b = j × n b=j \times n b=j×n, m = ( i % j ) × n m=(i \% j) \times n m=(i%j)×n
很明显,a、b、m具有相同的最大公约数。
代码:
func MaxDivisor(a, b int) int {
if a < b {
a, b = b, a
}
for m := a % b; m != 0; m = a % b{
a, b = b, m
}
return b
}
递归版:
func MaxDivisor(a, b int) int {
if a < b {
a, b = b, a
}
if b == 0 {
return a
} else {
return MaxDivisor(b, a % b)
}
}