版本一】
/*
思路一:在循环中,只要除数不等于0,用较大数除以较小的数,
将小的一个数作为下一轮循环的大数,取得的余数作为下一轮
循环较小的数,如此循环直到较小的值为0,返回较大的数,
此数就是最大公约数,最小公倍数为两数之积除以最大公约数
*/
import java.util.Scanner;
class Test05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int m = sc.nextInt();
System.out.println("请输入第二个整数:");
int n = sc.nextInt();
int maxGongYue = getMaxGongYue(m,n);
int minGongBei = m*n/maxGongYue;
System.out.println("最大公约数是:"+maxGongYue);
System.out.println("最小公倍数是:"+minGongBei);
}
//定义求最大公约数的方法
public static int getMaxGongYue(int m,int n){
if(m<n){
int temp = m;
m = n;
n = temp;
}
while(n!=0){
if(m==n){
return m;
}else{
int remainder = m % n;
m = n;
n = remainder;
}
}
return m;
}
}
版本二】
/*
思路:
最大公约:从两个数中的较小值开始递减到1,直到遇到第一个能同时被两个数整除的就是最大公约数
最小公倍数:从两个数中的较大值开始递增到两数之积,直到遇到第一个能同时整除这两个数的就是最小公倍数
*/
import java.util.Scanner;
class Test05_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int m = sc.nextInt();
System.out.println("请输入第二个整数:");
int n = sc.nextInt();
int max = m>n?m:n;
int min = m<n?m:n;
//最大公约数
for(int i=min;i>0;i--){
if(m%i==0&&n%i==0){
System.out.println("最大公约数是:"+i);
break;
}
}
//最小公倍数
for(int i = max;i<=m*n;i++){
if(i%m==0&&i%n==0){
System.out.println("最小公倍数是:"+i);
break;
}
}
}
}
输出结果】