欧几里得算法 --- 辗转相除法求最大公约数

历史上第一个称得上算法的好像就是这个欧几里得算法,其实就是地球人都知道的辗转相除,不要小看她,她是很美的。

简单的描述就是,记gcd(a,b)表示非负整数a,b的最大公因数,那么:gcd(a,b)=gcd(b,a%b)或者gcd(a,0)=gcd(0,a)=a。 算法很简单,不管是用递归还是循环:   int gcd(int a,int b)   {    if(a==0)    return b;    if(b==0)    return a;    return gcd(b,a%b);   } 
 
基本的代码:
#include <iostream> #include <cstdio> using namespace std; int gcd(int a, int b) {  if(a == 0)  return b;  if(b == 0)  return a;  return gcd(b, a%b); } int main() {  int n, m, ans = 0;  scanf("%d%d", &n, &m);  if(n > m)  ans = gcd(n, m);  else  ans = gcd(m, n);  printf("%d\n", ans);  return 0; } 


你可能感兴趣的:(欧几里得算法 --- 辗转相除法求最大公约数)