Java50道经典习题-程序6 求最大公约数及最小公倍数

时间:2021-07-03 08:56:02

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
分析:用辗转相除法求最大公约数
    两个数的最大公约数:设两个数分别为n和m,(n>=m);用定义一个变量i,使用for循环,将i的取值从m一直到1,用i分别去取模于m和n,当两个数被取模的结果都是0时,返回此时变量i的值,此时i的值即为最大公约数
    两个数的最小公倍数=两个数之积/最大公约数

 import java.util.*;
public class Prog6 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);// 接收控制台输入的信息
System.out.print("请输入第一个整数:");
int num1 = scan.nextInt(); // 取出控制台输入的信息
System.out.print("请输入第二个整数:");
int num2 = scan.nextInt(); // 取出控制台输入的信息
scan.close(); System.out.println("最大公约数是:"+maxCommonDivisor(num1, num2));// 调用maxCommonDivisor()方法
System.out.println("最小公倍数是:"+minCommonMultiple(num1, num2));// 调用minCommonMultiple()方法
} //求最小公倍数
public static int minCommonMultiple(int m,int n) {
return m*n/maxCommonDivisor(m,n);
} //求最大公约数
public static int maxCommonDivisor(int m,int n) {
//判断输入的两个数的大小,保证大的数始终放在第一个参数位置
if(m<n) {
int temp=m;
m=n;
n=temp;
} int i=n;//从大到小,第一次求出来的公约数就是最大公约数,如果不能同时整除两个数,则不是公约数
while((n%i!=0)||(m%i!=0))
{
i--;
}
return i;
}
}
/*运行结果
请输入第一个整数:6
请输入第二个整数:8
最大公约数是:2
最小公倍数是:24
*/