求最大公约数方法的总结

    技术2024-07-29  67

    一、欧几里得算法

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

     

    二、Stein算法

    对于很大的数,用高精度表示,用欧几里得算法的话大数除法比较麻烦。

    用这个算法会比较简单,只用到除2与加减运算。

    下面的代码摘自这个网址,罪过罪过^_^

    http://www.blogjava.net/renyangok/archive/2007/12/15/167956.html

     

    int gcd(int a,int b){      if(a<b){  //arrange so that a>b          int temp = a;            a = b;            b=temp;      }      if(0==b)//the base case         return a;      if(a%2==0 && b%2 ==0)  //a and b are even          return 2*gcd(a/2,b/2);      if ( a%2 == 0)  // only a is even          return gcd(a/2,b);      if ( b%2==0 )  // only b is even          return gcd(a,b/2);      return gcd((a+b)/2,(a-b)/2);  // a and b are odd }

     

    求多个数的最大公约数就多用几次欧几里得吧。

    最新回复(0)