【9404】最大公约数

来源:互联网 发布:java短链接实现 编辑:程序博客网 时间:2024/06/15 05:13

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


 

1 0