欧几里得辗转相除法,有效地处理求两个数的最大公约数问题!
下面是代码和实现!
1 #include<stdio.h> 2 int gcd(int m,int n) 3 { 4 if(m<n) 5 gcd(n,m); 6 int r; 7 do{ 8 r=m%n; 9 m=n; 10 n=r; 11 }while(r);//当余数不为0时,让m=n,n=r直至余数为0,此时的m就是最大公约数! 12 return m; 13 } 14 int main() 15 { 16 int a,b; 17 while(scanf("%d%d",&a,&b)) 18 printf("%d ",gcd(a,b)); 19 return 0; 20 }
下面是用递归的方法写的:
1 #include<stdio.h> 2 int gcd(int m,int n) 3 { 4 if(m<n) 5 gcd(n,m); 6 if(n==0) 7 return m; 8 else 9 return gcd(n,m%n); 10 } 11 int main() 12 { 13 int a,b; 14 while(scanf("%d%d",&a,&b)!=EOF) 15 { 16 printf("%d ",gcd(a,b)); 17 } 18 return 0; 19 }