最大公约数GCD(Greatest Common Divisor)算法小结

来源:互联网 发布:system.log windows 编辑:程序博客网 时间:2024/05/29 18:34
  • 辗转相除法, 又名欧几里德算法
int gcd(int a,int b)  {      if(b==0) return a;      return gcd(b,a%b);  }  
  • 数学归纳法
int gcd(int a,int b)  {      while(a!=b)      {          if (a>b) a-=b;            else   b-=a;      }      return a;  }  
  • Stein算法
int gcd(int x,int y){    int i,j;    if (x==0) return y;    if (y==0) return x;    for (i=0;x&1==0;i++) x>>=1;    for (j=0;y&1==0;j++) y>>=1;    if (i>j) i=j;    while (1){        if (x<y) {            x^=y;            y^=x;            x^=y;        }        if ((x-=y)==0) return y<<i;//此处x的值已经发生改变,不等价于x==y        while (x&1==0) x>>1;    }} 
0 0
原创粉丝点击