- 问题描述
【Description】
任意给两个正整数m和n,求它们的最大公约数
【Input】
输入两个正整数m和n。
【Output】
输出m和n的最大公约数
【Sample Input】
12 18
【Sample Output】
6 - 问题分析
在数学中,求最大公约数有一个很有名的方法叫做辗转相除法。辗转相除法体现了递推法的基本思想。
设m,n为两个正整数,辗转相除法的过程是:
(1)将问题转化为数学公式:r=m%n,r为m除以n的余数。
(2)若r=0,则n为所求的最大公约数,输出n。
(3)若r!=0,则令m=n,n=r,继续递推,再重复前面的(1)、(2)步骤。其中,第(3)步为递推部分。 - 参考程序
#include"stdio.h"
int gcd(int a,int b)
{
while(b > 0)
{
int temp = a%b;
a = b;
b = temp;
}
return a;
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
printf("%d\n",gcd(m,n));
return 0;
}