辗转相除求最大公约数

辗转相除

假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里德算法
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。

    public int gcd(int a, int b){
        return a == 0 ? b : gcd(b%a, a);
    }

a作为较小值,b%a的值作为下次相除的除数
若初次比较时,a>b,递归调用gcd(b%a,a)时将交换a,b位置。
若a为0,表示上次的a,b有倍数关系,返回此时的b即为公约数。

posted @ 2020-03-27 11:34  神应歌  阅读(262)  评论(0)    收藏  举报