利用辗转相除法求两个整数的最大公约数

本文介绍了使用辗转相除法(欧几里得算法)来求解两个整数的最大公约数的方法。该文提供了两种实现方式:递归与迭代,并通过实例详细解释了算法的运行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在数学中,辗转相除法,又称欧几里得算法,是求最大公约数的算法。两个整数的最大公约数(亦称公因子)是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数21(252 = 21 × 12;105 = 21 × 5);因为252 − 105 = 147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。具体的介绍请看维基百科中的解释——辗转相除法。下面是具体实现代码:

/* (1) 利用递归实现 */
int rgcd(int p, int q) {
    if (q == 0) 
        return p;
    int r = p%q;
    return gcd(q, r);
}
/* (2) 利用迭代实现 */
int gcd(int p, int q) {
    int temp;
    while (q != 0) {
        int temp = p%q;
        p = q;
        q = temp;
    }

    return p;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值