最大公约数和最小公倍数

最大公约数gcd(a,b)

辗转相除法

LL gcd(LL a, LL b){
    LL t;
    while(b){
        t = b;
        b = a % b;
        a = t;
    }
    return a;
}

递归

LL gcd(LL a, LL b){
    if(b == 0) return a;
    else return gcd(b, a%b);
}

LL gcd(LL a, LL b){
    return b ? gcd(b, a%b) : a;
}
//两种都可以

 

 

最小公倍数 lcm = a * b / gcd(a,b)

(注意,这样写法有可能会错,因为a * b可能因为太大  超出int  或者 超出 long long)

所以推荐写成 : lcm = a / gcd * b

 

性质:

gcd(ka, kb) = k * gcd(a, b)

lcm(ka, kb) = k * lcm(a, b)

lcm(S/a, S/b) = S/gcd(a, b)

posted @ 2017-12-11 12:40  萌新上路  阅读(105)  评论(0编辑  收藏  举报