JAVA经典算法(六)

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

}
发布了151 篇原创文章 · 获赞 164 · 访问量 9806

猜你喜欢

转载自blog.csdn.net/ls_wifi/article/details/103904169
今日推荐