sicily 6418. 最大公约数

Description

 如果有一个自然数a能 被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大 公约数(greatest common divisor, gcd)。例: 在2、4、6中,2就是2,4,6的最大公约数。

实现函数:

int gcd(int m,int n);

返回m,n的最大公约数,m,n>=1.

 

 

有四种方法可以AC,即迭代/递归与更相减损/辗转相除的组合。

/* 递归+更相减损 */
int gcd (int m, int n)
{
    if( m == n )
    { 
        return m;
    } 
    else if ( m > n )
    { 
        return gcd( m - n, n );
    } 
    else
    { 
        return gcd( n - m, m );
    } 
}
/* 迭代+更相减损 */
int gcd ( int m, int n )
{
    
    while ( m != n ) 
    {
        if ( m > n )
        {
            m = m - n;
        }
        else
        {
            n = n - m;
        }
    }
    
    return m;
}
/* 递归+辗转相除 */
int gcd (int m, int n)
{
    if ( n == 0 )
    {
        return m;
    }
    else if ( m == 0 )
    {
        return n;
    }
    else if ( m >= n )
    {
        return gcd ( m % n, n );
    }
    else
    {
        return gcd ( n % m, m );
    }
}
/* 迭代+辗转相除 */
int gcd (int m, int n)
{
    int r;
    
    while ( n != 0 )
    {
        r = n;
        n = m % n;
        m = r;
    }
    
    return m;
}
posted @ 2012-11-18 22:27  Joyee  阅读(346)  评论(0编辑  收藏  举报