求最大公因数的简单方法

欧几里得算法

1. 算法思路

   求解两个正整数(M,N,M<N)的最大公因数最明显的算法是循环遍历从2到M,判断是否可以同时整除M和N,若可以,暂存到最大公因数变量(初始为1),之后返回该变量。代码略。

   该算法的复杂度为O(N),当两个数很大且很接近时,此算法会很耗时、很低效,今天翻看算法书,学到一个欧几里得算法,算法复杂度为O(logN),且在处理两个很相近的大数时很高效。

   算法思想:若大数除以小数余数为0,则最大公因数为小数,否则最大公因数是小数和余数的最大公因数

2. 代码实现 

    /**
     * 欧几里得算法实现
     * @param m     大数
     * @param n     小数
     * @return  最大公因数
     */
    public long gcd(long m, long n) {
        while (n != 0) {
            long rem = m % n;
            m = n;
            n = rem;
        }
        return m;
    }

3. 扩展说明

 当碰到需要使用算法求解时,经常会用到一些对数思路去优化算法,如:有序数组的折半查询,欧几里得算法等,可以将算法的复杂度降低到O(logN)

 

posted @ 2023-09-22 18:36  流年的blog  阅读(65)  评论(0编辑  收藏  举报