求最大公约数

这段代码是一个实现求两个整数最大公约数(Greatest Common Divisor, GCD)的经典算法,通常称为欧几里得算法(Euclidean algorithm)。下面是对这个函数的详细解释:

int gcd(int a, int b) {    
    while (b != 0) {    
        int temp = b;  // 将b的值暂存到temp中  
        b = a % b;     // 用a除以b的余数来更新b的值  
        a = temp;      // 将原来的b值(现在保存在temp中)赋给a  
    }    
    return a;  // 当b变为0时,循环结束,此时a即为两数的最大公约数  
}

这个算法的基本思想是利用辗转相除法(也称欧几里得除法)来求两个数的最大公约数。在任意给定两个正整数a、b(假设a>b),它们的最大公约数与b、a%b的最大公约数相同。其中“%”表示取模运算,即a除以b的余数。

算法的步骤如下:

  1. 比较两个数a和b,如果b为0,则最大公约数为a,算法结束。
  2. 否则,将a除以b得到的余数赋值给b,原来的b值赋给a。
  3. 重复步骤1和2,直到b为0为止,此时的a即为最大公约数。

这个算法之所以有效,是因为根据数学原理,两个整数的最大公约数不会比它们中较小的那个数大。通过不断将较大的数替换为两数相除的余数,直到余数为0,此时另一个数就是两数的最大公约数。

例如,求48和18的最大公约数:

  • 48 % 18 = 12,此时a=18, b=12
  • 18 % 12 = 6,此时a=12, b=6
  • 12 % 6 = 0,此时a=6, b=0,循环结束,6即为48和18的最大公约数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值