证明:辗转相除法求a, b最小公约数的正确性
推广一下蒟蒻的Blog
1.设gcd(a,b)为a, b最小公约数
2.设 p=a/b,q=a%b
3.有a=b∗p+q
4.a 定能被 gcd(b,q) 整除,且gcd(b,q)为其最大公约数 (慢慢想)
5.即gcd(a,b)==gcd(b,a%b)
6.求得gcd(b,a%b)即可
7.同理:gcd(b,a%b)==gcd(a%b,b%(a%b)) (有点绕慢慢想)
8.终止条件:当gcd(a,b)中的b==0,则gcd(a,b)==a
未简化Code:
inline int gcd(int a, int b){
if(b) return gcd(b, a % b);
return a;
}
三目运算符+longlong究极宇宙无敌简化版Code:
inline LL gcd(LL a, LL b){
return b ? gcd(b, a % b) : a;
}
//LL是long long