于欧几里得算法的对比
与欧几里得求gcd相比,stein算法的优势在于稳定,欧几里得算法中存在取模运算,而当模数过大时,取模运算的耗时会增加,而stein算法中只涉及移位,速度超快!
原理
gcd(ka,kb)=k*gcd(a,b)
实现
int stein(int a,int b)
{
if(a<b)a^=b,b^=a,a^=b;//交换
if(!b)return a;
if((!(a&1)) && (!(b&1)))return stein(a>>1,b>>1)<<1;
else if((a&1) && (!(b&1)))return stein(a,b>>1);
else if((!(a&1)) && (b&1))return stein(a>>1,b);
else return stein(a-b,b);
}