最大公约数:辗转相除法(欧几里得算法)
一、用while循环实现
int gcd(int a,int b){
int c;
while(b){
c=a%b;
a=b;
b=c;
}
return a;
}
二、用递归函数实现
int gcd(int a,int b){
return b?gcd(b,a%b):a;//b是0返回a,否则返回gcd(b,a%b)
}
如果a>=b,就正常进行,如果b>a,那么第一步或者第一次循环的工作是将a、b的值进行了交换。
最小公倍数
先求出两个数的最大公约数,则最小公倍数为两数乘积除最大公约数
int gcd(int a,int b){//最大公因数greast common divisor
return b?gcd(b,a%b):a;
}
int lcm(int a,int b){//最小公倍数least common multiple
return a*b/gcd(a,b);
}