求a与b的最大公因数与最小公倍数
求最大公因数:
辗转相除法,欧几里得算法
//辗转相除法
long long gcd(long long a, long long b){
long long aa = a, bb = b, r;
a = max(aa,bb);
b = min(aa,bb);
do{
r = a%b;
a = b;
b = r;
}while(r!=0);
return a;
}
例如:48,36
a = 48, b = 36;
r = a%b = 12, a = 36, b = 12;
r = 36%12 = 0, a = 12, b = 0;
r == 0, 跳出
最大公因数 a = 12
递归实现:递归实现参考
gcd(a,b)=gcd(b,a%b)
long long gcd(long long a, long long b)
{
return b == 0 ? abs(a) : gcd(b, a%b);
}
最小公倍数:
long long gcd(long long a, long long b){
//找出a与b的最大公约数
long long r = gcd(a,b);
return a*b/r;
}
例如:48,36
由上述48,36的最大公约数 r = 12;
最小公倍数:48*36/12 = 144