C语言和C++中求两个数的最大公约数的多种实现方式

分类:知识百科 日期: 点击:0

C语言和C++中求两个数的最大公约数有多种实现方式,比如辗转相除法、穷举法、更相减损术、质因数分解法等。

辗转相除法

辗转相除法是一种比较常用的求两个数的最大公约数的算法,它的基本思想是:用较大的数除以较小的数,再用除数除以出现的余数,如此重复,直到余数是0为止,此时被除数即为两数的最大公约数。

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

穷举法

穷举法是一种比较简单的求两个数的最大公约数的算法,它的基本思想是:从两个数中较小的那个数开始,一直递减到1,每次减1,判断这两个数是否都能被这个数整除,如果都能被整除,则该数就是两数的最大公约数。

int gcd(int a, int b)
{
    int c;
    c = (a < b) ? a : b;
    while (c > 0)
    {
        if (a % c == 0 && b % c == 0)
            break;
        c--;
    }
    return c;
}

更相减损术

更相减损术也是一种比较常用的求两个数的最大公约数的算法,它的基本思想是:用较大的数减去较小的数,把差代替较大的数,继续用较小的数减去差,如此重复,直到差为0为止,此时较小的数即为两数的最大公约数。

int gcd(int a, int b)
{
    int c;
    while (b != 0)
    {
        c = a - b;
        a = (c > b) ? c : b;
        b = (c > b) ? b : c;
    }
    return a;
}

质因数分解法

质因数分解法是一种比较简单的求两个数的最大公约数的算法,它的基本思想是:将两个数都分解为质因数的乘积,求出两个数中公有的质因数,将这些公有的质因数相乘,即可得到两个数的最大公约数。

int gcd(int a, int b)
{
    int c;
    c = a;
    while (c > 1)
    {
        if (a % c == 0 && b % c == 0)
            break;
        c--;
    }
    return c;
}
标签:

版权声明

1. 本站所有素材,仅限学习交流,仅展示部分内容,如需查看完整内容,请下载原文件。
2. 会员在本站下载的所有素材,只拥有使用权,著作权归原作者所有。
3. 所有素材,未经合法授权,请勿用于商业用途,会员不得以任何形式发布、传播、复制、转售该素材,否则一律封号处理。
4. 如果素材损害你的权益请联系客服QQ:77594475 处理。