更相减损术

更相减损术 出自中国古代 '九章算术', 是一种最大公约数的算法.

他的原理简单: 两个正整数a和b(a>b), 他们的最大公约数等于a-b的差值c和较小数b之间的最大公约数.

    /**
     * 更相减损术
     *
     * @return 最大公约数
     */
    public static int getGreatestCommonDivisorV1(int a, int b) {
        if (a == b) {
            return a;
        }
        int big = Math.max(a, b);
        int small = Math.min(a, b);
        return getGreatestCommonDivisorV1(big - small, small);
    }

辗转相除法

辗转相除法, 又名欧几里得算法, 该算法目的是求出两个正整数的最大公约数.

该算法基于一个定理: 两个正整数a和b(a>b), 他们的最大公约数等于a除以b的余数c和b之间的最大公约数.

    /**
     * 辗转相除法 (欧几里得算法)
     *
     * @return 最大公约数
     */
    public static int getGreatestCommonDivisorV2(int a, int b) {
        int big = Math.max(a, b);
        int small = Math.min(a, b);
        if (big % small == 0) {
            return small;
        }
        return getGreatestCommonDivisorV2(big % small, small);
    }
最后修改:2022 年 06 月 17 日
如果觉得我的文章对你有用,请点个赞吧~