辗转相除法(欧几里得算法)求最大公约数

该定理为gcd(a, b) == gcd(b, a%b), 意思就是a与b的最大公约数, 跟b与a除b的余数相同. 根据此定理,我们即可写出求最大公约数的算法.

// 递归算法
int gcd(a, b){
    if(b == 0) // 当b为0时, a与b的最大公约数为a
        return a;
    return gcd(b, a % b); //否则带入定理
}

// 迭代算法
int gcd(a ,b){
    int temp;
    while(b != 0){
        temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

求最小公倍数

设p为a与b的最大公约数, a与b的最小公倍数即为a*b/p

int lcm(a, b){
    return a*b/gcd(a, b); // gcd(a, b)为a,b的最大公约数
}

VincentFF
84 声望0 粉丝