版本一】
/* 思路一:在循环中,只要除数不等于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; } } } }输出结果】
