题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
求最大公约数用的是欧几里得算法(辗转相除法)
百度百科里都有解释,这是我复制粘贴过来的哈哈
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里德算法,是这样进行的:
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。
两个数的最小公倍数:两个数的积除以这两个数的最大公约数。
根据上述描述,分为以下三步思路:
1、首先给出m,n两个整数,先求出最大公约数,则最小公倍数就等于(m*n)/最大公约数
2、先判断m,n的大小,利用交换的思想让大的数在左边
3、如果m%n==0则表示余数为0,除数n则为最大公约数,否则的话继续让它递归,n作为新的被除数,m%n得到的余数作为除数去辗转相除,最后直到余数为0,除数则为最大公约数,最小公倍数自然也就迎刃而解了。
代码如下所示:
package cn.ls.lanqiao;
import java.util.Scanner;
public class Test6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n=sc.nextInt();
System.out.println("最小公倍数为"+m*n/gcd(m,n));
}
public static int gcd(int m,int n) {
if(m<n) {
int t=m;
m=n;
n=t;
}
if(m%n==0) {
System.out.println("最大公约数为"+n);
return n;
}else {
return gcd(n,m%n);
}
}
}