gcd算法
gcd总结(又名欧几里得算法)
用途:求最大公约数(最大公因数)。
常用方法:辗转相除法,迭代相减法。
核心原理:
一.(a,b) = (a,k*a+b);a,b,k为自然数,如果p是a和ka+b的公约数,则p一定也整除b;(证明:设a/b = m,(ka+b)/p = n,m,则b/p = n - k;又k,m,n都为自然数,即得证);
二.gcd(a,b) = gcd(b,a mod b);
自我认为二比一更好,因为二步骤更少,节约时间,但一比二更简单易懂。
接下来写代码。
1.直接法:
#include<stdio.h>
int gcd(int m, int n)
{
while(m%n!=0)
{
int r = m%n;
m = n;
n = r;
}
return n;
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
printf("%d\n",gcd(m,n));
return 0;
}
- 递归法
#include<stdio.h>
int gcd(int x, int y)
{
if(y) {
return gcd(y,x%y);
}
else {
return x;
}
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",gcd(a,b));
return 0;
}
//本人第一次写博客,如有不好的地方,望多多包涵。

浙公网安备 33010602011771号