JAVA代码三种算法实现正整数最大公约数和最小公倍数

1.辗转相除法(也就是欧几里得算法)

    public static int method1(int a, int b) {
        if (a < b) {
            int temp = a;
            a = b;
            b = temp;
        }
        if (b == 0) {
            return a;
        }
        int r = a % b;
        return method1(b, r);

    }

前数大于后数字,两数字的最大公约数<===>后数与前数除以后数的余数的最大公约数<====>递归调用就先行了,直到两数的余数为0,前数就是最大公约数了,最小公倍数等于两数之积除以最大公约数

2.穷举法

public static int method2(int a, int b) {
        if (a < b) {
            int temp = a;
            a = b;
            b = temp;
        }
        int i;
        for (i = b; i > 0; i--) {
            if (a % i == 0 && b % i == 0) {
                break;
            }
        }
        return i;
    }

从两数的小的数字开始循环,不断自减,当两数能第一次同时整除该数字的时候,该数字就是两数的最大公约数字,最小公倍数等于两数之积除以最大公约数

3.更相减损法

 public static int method3(int a, int b) {
        while (true) {
            if (a > b) {
                a -= b;
            } else if (a < b) {
                b -= a;
            } else {
                return a;
            }
        }
    }

以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。

这个相等的数字就是最大公约数,最小公倍数等于两数之积除以最大公约数

4.求三个数字的最大公约数和最小公倍数

用第二种穷举法即可,从最小数字开始,递减,当三个数字第一次同时整除该数字的时候,该数字就是最大公约数,最小公倍数可以从最大数字开始递增,当该数字第一次同时整除给定的三个数字的时候,该数字就是最小公倍数,也可以求前两个数字的最小公倍数之后,再拿该数字与第三个数字求最小公倍数,算法参考以上三种.

 

个人分析: 穷举法:非常容易理解,就是从最大公约的本质进行求解的,但是其实算法是很低级的

                将更相减损法和辗转相除法进行结合同时结合移位操作,是最高效的求解最大公约数字的方法

 

 

 

你可能感兴趣的:(JAVA代码三种算法实现正整数最大公约数和最小公倍数)