码迷,mamicode.com
首页 > 其他好文 > 详细

最大公约数问题

时间:2015-04-21 09:54:49      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:算法   gcd   

技术分享解法一:

      辗转相除法,使用原理为f(x,y)表示x,y的最大公约数,取k=x/y,b=x%y,则x=ky+b,如果一个数能够同时整除x和y,则必能同时整除b和y,而能够同时整除b和y的数也必能同时整除x和y,即x和y的公约数与b和y的公约数相同的,其最大公约数也是相同的,则有f(x,y)=f(y,x%y)(y>0).

具体代码如下:

int gcd(int x,int y)

{

 return (!y)?x:gcd(y,x%y);

}

技术分享解法二:

       如果一个数能够同时整除x和y,则必能同时整除x-y和y,而能够同时整除x-y和y的数也必能同时整除x和y,即x-y和y的公约数与x和y的公约数相同的.如果x<y,可以先交换(x,y).因为(x,y)=(y,x)。

代码如下:

BigInt gcd(BigInt x,BigInt y)

{

  if(x<y)

      return gcd(y,x);

if(y==0)

  return x;

else 

return gcd(x-y,y);

}

技术分享解法三:

技术分享技术分享

代码如下:

BigInt gcd(BigInt x,BigInt y)

{

if(x<y) 

return gcd(y,x);

if(y==0)

 return x;

else

{

   if(IsEven(x))

  {

      if(IsEven(y))

      {

            return (gcd(x>>1,y>>1)<<1); 

      }

      else

           return gcd(x>>1,y);

  }

   else

   {

        if(IsEven(y))

             return gcd(x,y>>1);

       else

          return gcd(y,x-y);

   }

}

}

最大公约数问题

标签:算法   gcd   

原文地址:http://blog.csdn.net/wangfengfan1/article/details/45154857

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!