【9404】最大公约数
Time Limit: 10 second
Memory Limit: 2 MB
问题描述
用递归方法求两个正整数m和n的最大公约数。(m>0,n>0)
Input
两个数,即m和n的值。
Output
最大公约数
Sample Input
8 6
Sample Output
gcd=2
【题解】
用辗转相除法来做就好
假设k是两个数a,b的最大公约数
a = k*x1 b = k*x2;
k*x1 / k*x2 = x3 + rest
k*(x1) = k*x2*x3 + rest
要使得(k*x2*x3+rest)能被k整除,则 rest也应该能被k整除。
则rest = x4*k;
则可以转换成求b和x4*k的最大公约数。
最后若是余数为0,则说明 k*x2就是最大公约数。
【代码】
#include <cstdio>
int m,n;
void input_data()
{
scanf("%d%d",&m,&n);
}
int gcd(int a,int b) //用递归的写法来写辗转相除法
{
if ( b == 0)
return a;
else
return gcd(b,a % b);
}
int main()
{
input_data();
printf("gcd=%d",gcd(n,m));
return 0;
}

浙公网安备 33010602011771号