stein算法(求gcd)

用欧几里得算法求gcd确实很方便,但是对于求大整数的gcd的情况下却很慢(因为要取模)


stein算法的时间空间复杂度都和欧几里得相同,而且只需要位移和加减求可以实现

原理:gcd(ka,kb)=k*gcd(a,b)


#define D long long
D stein(D a, D b){
    if(a==0) return b;
    if(b==0) return a;
    if(a%2==0&&b%2==0) return 2*stein(a>>1,b>>1);
    else if(a%2==0) return stein(a>>1,b);
    else if(b%2==0) return stein(a,b>>1);
    return stein(abs(a-b),min(a,b));
}

猜你喜欢

转载自blog.csdn.net/jk_chen_acmer/article/details/81430323
今日推荐