最大公约数
方法一:欧几里得法(辗转相除法)
算法思想:依托于定理gcd(a,b) = gcd(b,a mod b)
使用迭代的方式
public static int gcd(int a,int b) {
while(b!=0){
int temp = b;
b = a%b;
a = temp;
}
return a;
}
使用递归的方式
public static int gcd(int a,int b) {
return b!=0 ? a : gcd(b,a%b);
}
辗转相减法
算法思想:
1、若a > b,则a = a - b
2、若b > a,则b = b - a
3、若a == b,则a(或b)即为最大公约数
4、若a != b,则回到1
使用迭代的方式
public static int gcd_sub(int a, int b){
while(a != b){
if(a > b)
a = a - b;
else
b = b - a;
}
return a;
}
使用递归的方式
public static int gcd_sub(int a, int b){
if(a == b)
return a;
return a > b ? gcd_sub(a - b, b) : gcd_sub(a, b - a);
}
最小公倍数
在求得两个数最大公约数后,最小公倍数即为a * b / gcd(a, b)