数字问题2:最大公约数

这个是最经典的数字的问题,在很多地方都能见到这个题目

求出两个数的最大公约数,如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。

第一种思路是根据最大公约数的定义,辗转相除法,从比较小的整数开始,向下–,直到找到满足要求的整数,如果都不满足,就返回1. 这样做的运算量比较大,效率比较低,更高效一点的是更相减损术。

1. 辗转相除法

 public int gcd (int a, int b) {
        // write code here
        int min=a>b?b:a;
        for(int i=min;i>=1;i--){
           if(a%i==0 && b%i==0){
               return i;
           } 
        }
        return 1;
    }

2. 更相减损数

上面的方式需要进行大量的取模运算,一种更为简单的方式是只用减法:

 public int gcd (int a, int b) {
        // write code here
           while(a != b){
            if(a > b)
                a -= b;
            else
                b -= a;
        }
        return a;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纵横千里,捭阖四方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值