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