欧几里得(辗转相除)算法

欧几里得算法是指计算两个数时
将较大的A除以较小的B
得到余数C
再用C除较小的数,反复循环,最后得到0,最后得到0时较小的数就是最大公约数。

代码

int gcd(int a, int b)
{
    if (b == 0)
        return a;
    int c = a % b;
    return gcd(b, c);
}

问题

1.为什么无论为gcd()输入的参数哪一个大,最后都能求出公约数?

这是因为在计算最大公约数的过程中,我们不断使用较小的数去除以较大的数,得到余数后,将较大的数替换为余数,然后再将较小的数替换为原来的较大的数。这个过程不断重复,直到余数为零。

假设 a > b,我们第一次将 a 除以 b 得到余数 c1,那么 a 可以表示为 a = b * k1 + c1,其中 k1 是整数商。然后我们将 b 替换为 c1,c1 替换为 b,这时有 a = b * k1 + c1,继续将 b 除以 c1,得到余数 c2,然后将 c1 替换为 c2,b 替换为 c1,这时有 a = b * k2 + c2,其中 k2 是新的整数商。如此重复,直到余数为零,此时 b 即为最大公约数。

因此,无论 a 和 b 的大小关系如何,都不会影响最终的结果,最大公约数总是可以正确地计算出来。

2.为什么叫gcd?

GCD是Greatest Common Divisor的意思

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容