GCD的两种求法

来源:互联网 发布:椭圆机 知乎 编辑:程序博客网 时间:2024/05/21 06:19

第一种辗转相除法

int gcd(int a,int b){return b?gcd(b,a%b):a;}

这里a>b;

第二种stein算法,利用了gcd的性质,gcd(ka,b) = gcd(a,b)   //gcd(ka,kb)=k*gcd(a,b)

int gcd(int a,int b){    if(a==0)return b;    if(b==0)return a;    if(a&1==0&&b&1==0)return 2*gcd(a>>1,b>>1);    if(a&1==0)return gcd(a>>1,b);    if(b&1==0)return gcd(a,b>>1);    return gcd(min(a,b),a-b>0?a-b:b-a);}


原创粉丝点击