最大公约数和最小公倍数
最大公约数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)