首先是中式
/*
首先把a,b中的所有偶数因子去掉
然后使用gcd(x,y)=gcd(min(x,y),max(x,y)-min(x,y))
计算出来
*/
#include<iostream>
using namespace std;
int gcd_china(int x,int y)
{
int r=0;
while(x&1!=1&&y&1!=1){
x/=2,y/=2,++r;
}
while(1){
while(x&1==0) x>>=1;
while(y&1==0) y>>=1;
(x>y)?x=x-y:y=y-x;
if(x == 0) return y<<r;
if(y == 0) return x<<r;
}
}
int main()
{
int n,x,y;
cin>>n;
while(n--){
cin>>x>>y;
cout<<gcd_china(x,y)<<endl;
}
}
然后是西式
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}