📜  gcd - C++ (1)

📅  最后修改于: 2023-12-03 15:00:52.864000             🧑  作者: Mango

GCD - C++程序员必备知识

什么是GCD?

GCD(Greatest Common Divisor)是最大公约数的缩写,它是两个或多个整数共有的约数中最大的一个。

GCD在程序开发中的应用

在程序开发中,GCD是一种常用的算法,它可以用于解决多种问题,例如:

  • 算法优化
  • 大数处理
  • 数论问题
如何求解GCD?

C++中有多种方法可以求解两个数的最大公约数,下面分别介绍几种常用方法。

1.辗转相除法

辗转相除法也称欧几里得算法,它是一种基于递归的算法,可以快速求出两个数的最大公约数。下面是用辗转相除法求解最大公约数的代码片段:

int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
}

注:上述代码中,用到了三目运算符,它的语法格式为:条件表达式 ? 表达式1 : 表达式2,如果条件表达式为真,则返回表达式1的值,否则返回表达式2的值。

2.更相减损术

更相减损术也是一种求解最大公约数的算法,它的基本思想是:用两个数的差来替代其中较大的那个数,并不断重复这个过程,直到两个数相等或者其中一个数变为0。下面是用更相减损术求解最大公约数的代码片段:

int gcd(int a, int b) {
    if (a == b) {
        return a;
    } else if (a > b) {
        return gcd(a - b, b);
    } else {
        return gcd(a, b - a);
    }
}
3.STL算法

C++标准库中还提供了一些求解最大公约数的STL算法,例如:

  • __gcd(a, b):求解a和b的最大公约数
  • std::gcd(a, b):C++17新增的求解a和b的最大公约数的方法,与__gcd实现相同

下面是用__gcd()std::gcd()求解最大公约数的代码片段:

int a = 12, b = 18;
int ans1 = __gcd(a, b);
int ans2 = std::gcd(a, b);
总结

GCD作为程序员的基础知识之一,掌握其求解方法可以帮助我们更好地完成程序开发。以上介绍的方法仅是众多求解GCD的方法之一,读者可以在实际开发中根据具体情况选择最合适的方法。