Java
主方法
public static void main(String[] args){
int m,n;
Scanner sc = new Scanner(System.in);
m = sc.nextInt();
n = sc.nextInt();
System.out.println("最大公约数是:" + mcd(m,n));
System.out.println("最大公约数是:" + mcd1(m,n));
System.out.println("最大公约数是:" + mcd2(m,n));
System.out.println("最大公约数是:" + mcd3(m,n));
System.out.println("最小公倍数是:" + lcm(m,n));
System.out.println("最小公倍数是:" + lcm1(m,n));
}
最大公约数
方法一:
//辗转相除法
public static int mcd(int m, int n){
while(m % n != 0){
int tmp = m % n;
m = n;
n = tmp;
}
return n;
}
方法二:
//辗转相除递归法
public static int mcd1(int m, int n){
if(n == 0){
return m;
}else{
return mcd1(n,m % n);
}
}
方法三:
//辗转相除最简洁写法
public static int mcd2(int m, int n){
return m % n == 0 ? n : mcd2(n,m % n);
}
方法四:
//穷举法 最大公约数肯定是小于或等于两个数中最小的那个,所以挨个除就行了
public static int mcd3(int m, int n){
int min = m > n ? n : m;
while(min != 0){
if(m % min == 0 && n % min == 0){
break;
}
min--;
}
return min;
}
最小公倍数
方法一:
//穷举法 与最小公倍数相反 最大公因数大于等于最大的那个数
public static int lcm(int m,int n){
int max = m > n ? m : n;
while(max != 0){
if(max % m == 0 && max % n == 0){
break;
}
max++;
}
return max;
}
方法二:
//辗转相除法
public static int lcm1(int m, int n){
int m1 = m;
int n1 = n;
while(m % n != 0){
int tmp = m % n;
m = n;
n = tmp;
}
return m1*n1 / n;
}
运行结果