gcd算法

gcd总结(又名欧几里得算法)

用途:求最大公约数(最大公因数)。

常用方法:辗转相除法,迭代相减法。

核心原理:

.(a,b) = (a,k*a+b);a,b,k为自然数,如果paka+b的公约数,则p一定也整除b;(证明:设a/b = m(ka+b)/p = nm,则b/p = n - k;又kmn都为自然数,即得证);

.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;

}

  1. 递归法

#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;

}

//本人第一次写博客,如有不好的地方,望多多包涵。

posted @ 2021-01-16 19:06  potentia1  阅读(913)  评论(0)    收藏  举报