今天看到个问题就随便写写。😂
辗转相除法
辗转相除法又名欧几里得算法,是由欧几里得(古希腊数学家)率先提出的,因此又名欧几里得算法。
算法原理推导
下图为实例:
可以看到整体的过程就是对于两个数a和b,进行一个a mod b,b mod (a mod b)的的过程,上面的情况说明,对于两个数a和b来说,他们的最大公约数就等于b与(a mod) b的公约数,这就很有意思了,为什么呢。
来看证明:
代码方面:
这种推导过程的话,用递归或者循环都可以,而且往往非常简单。
//求公约数 循环
int common_divisor(int a,int b){
//取两者中较大
int t;
if(a<b){
t=a;
a=b;
b=t;
}
while(b){
t=b;
b=a%b;
a=b;
}
return t;
}
//递归
int gcd(int m,int n){
//这里直接三目运算符
return n==0?m:gcd(n,m%n);
}