java递归实现最大公约数和最小公倍数

时间:2021-01-10 00:30:33

第一个最大公约数使用的2300年前被发明的欧几里得算法求得,大致原理为:

如果有两个非负整数p、q,若q==0,则最大公约数为p;否则,p和q的最大公约数就是p除以q所得的余数和q的最大公约数。


第二个最小公倍数更简单

如果有两个非负整数p、q,若q==0,则最大公约数为p;否则,p和q的最大公约数就是p除以q所得的余数和q的最大公约数。


关键代码如下:

//最大公约数(Greatest Common Divisor)
public int gcd(int p,int q){
if(q == 0) return p;
return gcd(q, p % q);
}

//最小公倍数(Least Common Multiple) 
public int lcm(int p,int q){
int pq = p * q;
return pq / gcd(p,q);
}