#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; }
原文:http://www.cnblogs.com/zyx1314/p/3561656.html