辗转相除法
**基本原理:**两个整数的最大公约数等于,其中较小的数和两数的差的最大公约数。
**个人解析:**若A、B有最大公约数K(A > B),则,A、B、(A - B)、A mod B(A / B的余数),都是K的倍数。即余数(A - B)和 B 的最大公公约数也是 K 。
由此递归,可知当 A mod B = 0,即 A 是 B 的倍数时,此时,B 即为 K 。
Java实现代码:
//递归求解
public static int gcd(int m, int n) {
while (true) {
if ((m = m % n) == 0)
return n;
if ((n = n % m) == 0)
return m;
}
}
扩展应用—求最小公倍数
//查找最小公倍数
public static int gcd(int m, int n){
int mn, r ;
if(m<n){
mn = m ;
m = n ;
n = mn;
}
mn = m * n ;//俩个数的乘积
r = m Mod n ;
while(r!=0){
m = n ;
n = r ;
r = m Mod n ;
}
return mn/n; //n为最大公约数
}
自荐
期待关注我的微信公众号 「 编程图解 」 ,查看最近的文章和动态。