算法-leetcode-每日一题-最大公约数

分析:求最大公约数要知道以下问题:

  1. 假设有两个数a和b,其中a是不小于b的数,记a被b除的余数为r,则a = b*q + r。

  2. 假设a和b的一个约数为u,那么a和b都能被u整除,则a = su b = tu,s和t都是整数。

  3. r = a - bq = su - (tu)q = (s - tq)u,所以r也能被u整除

  4. 所以a和b的任一约数同时也是r的约数(每次取余,直到余数为0)。**

    public static int gcd(int p, int q) {
        if(q == 0) {
            return p;
        }
        int r = p % q;
        return gcd(q, r);
    }
    

猜你喜欢

转载自blog.csdn.net/wujingchangye/article/details/88542193