求最大公约数(gcd)【泪光2929】

一、什么是公约数
公约数,也称为公因数,是指两个或多个整数共有的因数。具体来说,如果一个整数能被两个或多个整数整除,那么这个整数就是这些整数的公约数。

例如,考虑整数12和18:

12的因数有 :1, 2, 3, 4, 6, 12

18的因数有:1, 2, 3, 6, 9, 18

12和18的公约数是它们共有的因数,即:1, 2, 3, 6

附:lcm是最小公倍数
定理:a、b 两个数的最小公倍数(lcm)乘以它们的最大公约数(gcd)等于 a 和 b 本身的乘积。

如:gcd(a,b) * lcm(a,b)=a*b

所以,只要学会gcd,lcm就能直接推导出来

lcm(a,b) = a*b/gcd(a,b);

二、计算最大公约数的方法:
学习数论的一系列算法时,往往直接看算法,是看不懂的。

这里我们先学习数学解法、在给出算法。

辗转相除法:(欧几里得算法)
数学:
假设我们有两个正整数 a 和 b,其中 a>b。根据辗转相除法,最大公约数 gcd(a,b) 可以通过以下步骤求得:

  • 第一步:计算 a mod b,得到余数 r。
  • 第二步:将 a 替换为 b,将 b 替换为 r。
  • 第三步:重复上述步骤,直到 b=0 时,此时 a 即为最大公约数。

代码实现:

#include "iostream"
using namespace std;
// 求公约数
int gcd(int a, int b){
    while(a%b!=0){
        int c = a%b;
        a=b;
        b=c;
    }
    return b;
}
 
int main(){
    int a,b;
    a = 18;
    b = 12;
    cout<

你可能感兴趣的:(【泪光2929】代码仓,c++,算法,开发语言)