最大公约数的求法
以前写算法题的时候求解最大公约数往往用的是“欧几里得算法”,即辗转相除法:
//c语言
int gcd(int m , int n){
int r = n;
n = m % n;
m = r;
if(n > 0) m = gcd(m , n);
return m;
}
这样的递归写法写起来很是得心应手,我也从来没有想过非递归的写法,今天正好在书上看见了,觉得也很美妙啊:
//c语言
int gcd(int m , int n){
while(n>0){
int r = n;
n = m % n;
m = r;
}
return m;
}
还有蛮力法也不是不行
//c语言
int gcd(int m , int n){
if(m > n){
for(int i = n; i>=1 ; i--){
if(m % i == 0 && n % i ==0){
return i;
}
}
}else {
for(int i = m; i>=1 ; i--){
if(m % i == 0 && n % i ==0){
return i;
}
}
}
}