快速GCD

时间复杂度:O(log n)

头文件:无

int gcd(int a,int b){
    int i=__builtin_ctz(a),j=__builtin_ctz(b);
    int k=min(i,j),d;
    b>>=j;
    while(a){
        a>>=i;
        d=b-a;
        i=__builtin_ctz(d);
        if(a<b) b=a;
        if(d<0) a=-d;
        else a=d;
    }
    return b<<k;
}

备注:__builtin_ctz是GCC内置函数

posted @ 2024-12-19 22:10  Harry_W  阅读(47)  评论(0)    收藏  举报