题目:输入两个正整数m和n,求其最大公约数(m,n)和最小公倍数[m,n]。
程序分析:利用辗转相除法。
利用辗除法:用较大数除以较小数,再用出现的余数(第一余数)去除除数,
再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。
最后的除数就是这两个数的最大公约数。
最小公倍数:两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即(m,n)×[m,n]=m×n。
1 import java.util.*; 2 3 public class Problem06 { 4 //题目:输入两个正整数m和n,求其最大公约数(m,n)和最小公倍数[m,n]。 5 //利用辗除法:用较大数除以较小数,再用出现的余数(第一余数)去除除数, 6 //再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。 7 //最后的除数就是这两个数的最大公约数。 8 //最小公倍数:两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即(m,n)×[m,n]=m×n 9 public static void main(String args[]) { 10 System.out.println("请输入两个正整数:"); 11 Scanner s = new Scanner(System.in); 12 int m = s.nextInt(); 13 int n = s.nextInt(); 14 System.out.println(m+"和"+n+"的最大公约数是:"+zhanzhuan(m,n)); 15 System.out.println(m+"和"+n+"的最小公倍数是:"+gongbei(m,n)); 16 s.close(); 17 } 18 19 //辗转相除法找出最大公约数 20 public static int zhanzhuan(int m, int n) { 21 //找出较大的数 22 if(m<n) { 23 int temp = m; 24 m = n; 25 n = temp; 26 } 27 while(true) { 28 // 29 int r = m % n; 30 if(r==0) { 31 return n; 32 }else { 33 m = n; 34 n = r; 35 } 36 } 37 } 38 39 //最小公倍数:两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即(m,n)×[m,n]=m×n 40 public static int gongbei(int m, int n) { 41 return m*n / zhanzhuan(m,n); 42 } 43 }
输入30,45,输出结果:
1 请输入两个正整数: 2 30 3 45 4 30和45的最大公约数是:15 5 30和45的最小公倍数是:90