算法_趣味分数_Question2_最小公倍数(java实现)

这篇文章讲述的是算法趣味分数部分的最小公倍数问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。

问题描述

求任意两个数的最小公倍数(LCM),最小公倍数,如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整数来说,指该两数共有倍数中最小的一个。计算最小公倍数通常要借助最大公约数来辅助计算,二者关系为:
最小公倍数=两数乘积/最大公约数

算法分析

此题也有多种解决方法,第一种穷举法,从两数中最大一个数开始遍历找到一个数能同时除尽这两个数,这个数的最小的那个即为最小公倍数,第二种利用最小公倍数和最大公约数之间的关系,先算出最大公约数,再用公式计算出最小公倍数即可。

代码实现

  • 方法一(穷举法):
package fraction;
/**
 * @author 叶清逸
 * @date 2018年7月18日上午12:56:44
 * @version 1.0
 * @project fraction
 */
public class Q2_LCM {
    /**
     * 问题分析:求任意两个数的最小公倍数(LCM),最小公倍数,如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,
     *          对于两个整数来说,指该两数共有倍数中最小的一个。计算最小公倍数通常要借助最大公约数来辅助计算,二者关系为:
     *                                  最小公倍数=两数乘积/最大公约数
     * 
     * 算法分析:此题也有多种解决方法,第一种穷举法,从两数中最大一个数开始遍历找到一个数能同时除尽这两个数,这个数的最小的
     *          那个即为最小公倍数,第二种利用最小公倍数和最大公约数之间的关系,先算出最大公约数,再用公式计算出最小公倍数
     *          即可。
     */
    public static void main(String[] args) {
        method1() ;
        method2() ;
    }
    /*穷举法*/
    private static void method1(){
        /*初始化两个数a,b*/
        int a = 4 ;
        int b = 5 ;
        int lcm = 0 ;
        /*排序保证a始终小于b*/
        if(a > b){
            int t = a ; a = b ; b = t ;
        }
        /*遍历求最小公倍数*/
        for(int i=b ; ; i++){
            /*判断是否满足定义*/
            if(i%b==0 && i%a==0){
                lcm = i ;
                break ;
            }
        }
        System.out.println(a+"和"+b+"的最小公倍数为:"+lcm);
    }
}
  • 方法二(公式法):
package fraction;
/**
 * @author 叶清逸
 * @date 2018年7月18日上午12:56:44
 * @version 1.0
 * @project fraction
 */
public class Q2_LCM {
    /**
     * 问题分析:求任意两个数的最小公倍数(LCM),最小公倍数,如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,
     *          对于两个整数来说,指该两数共有倍数中最小的一个。计算最小公倍数通常要借助最大公约数来辅助计算,二者关系为:
     *                                  最小公倍数=两数乘积/最大公约数
     * 
     * 算法分析:此题也有多种解决方法,第一种穷举法,从两数中最大一个数开始遍历找到一个数能同时除尽这两个数,这个数的最小的
     *          那个即为最小公倍数,第二种利用最小公倍数和最大公约数之间的关系,先算出最大公约数,再用公式计算出最小公倍数
     *          即可。
     */
    public static void main(String[] args) {
        method1() ;
        method2() ;
    }
    /*公式法*/
    private static void method2(){
        /*初始化两个数a,b*/
        int a = 45 ;
        int b = 63 ;
        int lcm = 0 ;
        /*排序保证a始终小于b*/
        if(a > b){
            int t = a ; a = b ; b = t ;
        }
        /*先求出最大公约数*/
        int c = a ;
        int d = b ;
        int gcd = 0 ;
        while(c%d != 0){
            //k保存余数
            int k = c%d ;
            //除数变为c
            c = d ;
            //被除数变为余数
            d = k ;
        }
        /*辗转相除结束后的c即为所求的最大公约数*/
        gcd = d ;

        /*使用公式算出最小公倍数*/
        lcm = a*b/gcd ;
        System.out.println(a+"和"+b+"的最小公倍数为:"+lcm);
    }
}

样例输出

4和5的最小公倍数为:20
45和63的最小公倍数为:315

猜你喜欢

转载自blog.csdn.net/u013634252/article/details/81091236