求最大公约数(辗转相除法)

辗转相除法:取两个数中最大的数做被除数,较小的数做除数,用最大的数除较小数,如果余数为0,则较小数为这两个数的最大公约数,如果余数不为0,用较小数除上一步计算出的余数,直到余数为0,则这两个数的最大公约数为上一步的被除数。
实现的方法有很多,可以用递归,也可以用循环,下面给出这两种简单的方法。

递归实现:

long long GCD(long long m,long long n)
{
    if (m < n)
    {
        long long tmp = m;
        m = n;
        n = tmp;
    }
    if (n == 0)
        return m;            //余数为零时,结果为上一步的被除数
    else
        return GCD(n,m % n); //余数不为零,则一直递归

}

循环实现:

long long GCD(long long m,long long n)
{
    if (m < n)
    {
        long long tmp = m;
        m = n;
        n = tmp;
    }
    while(m%n!=0){
        long long tmp = m%n;
        m=n;
        n=tmp;
    }
    return n;
}

猜你喜欢

转载自blog.csdn.net/Thinke661314/article/details/82802183
今日推荐