求最大公约数(优化)

#include <iostream>



using namespace std;

typedef long long ll;



bool is_even(ll x)

{

    if(x%2)

        return 0;

    else

        return 1;

}



ll gcd(ll x,ll y)

{

      if(x<y)

         return gcd(y,x);

      if(y==0)

         return x;

      if(is_even(x))

      {

          if(is_even(y))

            return (gcd(x>>1,y>>1)<<1);//如果x、y是偶数,则x、y的

          else                                   //最大公约数gcd(x,y)==2*gcd(x/2,y/2)

            return gcd(x>>1,y);

      }

      else

      {

          if(is_even(y))

            return gcd(x,y>>1);

          else

            return gcd(y,x-y);//如果一个数能同时整除,和y,

      }                             //则必能同时整除x-y和y

}





int main()

{

    ll x,y;

    while(cin>>x>>y)

    {

        cout<<x<<""<<y<<"的最大公约数是:";

        cout<<gcd(x,y)<<endl;

    }

    return 0;

}

你可能感兴趣的:(优化)