Problem06 求最大公约数及最小公倍数

Problem06 求最大公约数及最小公倍数

题目:输入两个正整数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