题目:输入两个正整数m和n,求其最大公约数(m,n)和最小公倍数[m,n]。
程序分析:利用辗转相除法。
利用辗除法:用较大数除以较小数,再用出现的余数(第一余数)去除除数,
再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。
最后的除数就是这两个数的最大公约数。
最小公倍数:两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即(m,n)×[m,n]=m×n。
import java.util.*; public class Problem06 {
//题目:输入两个正整数m和n,求其最大公约数(m,n)和最小公倍数[m,n]。
//利用辗除法:用较大数除以较小数,再用出现的余数(第一余数)去除除数,
//再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。
//最后的除数就是这两个数的最大公约数。
//最小公倍数:两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即(m,n)×[m,n]=m×n
public static void main(String args[]) {
System.out.println("请输入两个正整数:");
Scanner s = new Scanner(System.in);
int m = s.nextInt();
int n = s.nextInt();
System.out.println(m+"和"+n+"的最大公约数是:"+zhanzhuan(m,n));
System.out.println(m+"和"+n+"的最小公倍数是:"+gongbei(m,n));
s.close();
} //辗转相除法找出最大公约数
public static int zhanzhuan(int m, int n) {
//找出较大的数
if(m<n) {
int temp = m;
m = n;
n = temp;
}
while(true) {
//
int r = m % n;
if(r==0) {
return n;
}else {
m = n;
n = r;
}
}
} //最小公倍数:两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即(m,n)×[m,n]=m×n
public static int gongbei(int m, int n) {
return m*n / zhanzhuan(m,n);
}
}
输入30,45,输出结果:
请输入两个正整数:
30
45
30和45的最大公约数是:15
30和45的最小公倍数是:90