最大公约数——gcd

             这几天看数论, 顺便总结一下;

       求最大公约数最容易想到的办法就是枚举,不过这样效率很低, 欧几里德辗转相除法相对来说效率很高而且很简单。

       递归代码:

int gcd( int a, int b)//递归
{
    if( b==0 ) return a;
    else return gcd(b, a%b);
}
    非递归:

int gcd(int a, int b)//迭代
{
    int temp;
    while( b!=0 )
    {
        temp=a;
        a=b;
        b=temp%b;
    }
    return a;
}

最初的原始版本是辗转相减:

int gcd( int a, int b)//减法
{
    int temp;
    while( b!=0 )
    {
        temp=a;
        a=b;
        while( temp>=b )
           temp-=b;
        b=temp;
    }
    return a;
}



你可能感兴趣的:(最大公约数——gcd)