longlongint gcd1(constlonglongint _a,constlonglongint _b){
auto a = _a, b = _b;
if (a < b)
return gcd1(b, a);
longlongint t;
while (b>0){
t = a;
a = b;
b = t%b;
}
return a;
}
longlongint gcd3(constlonglongint _a,constlonglongint _b){
auto a = _a, b = _b;
if (a < b){ gcd3(b, a); }
int factor = 1;
int cond = 0;
int s;
while (a != b){
if (a < b) {
longlongint t = a;
a = b;
b = t;
}
cond = ((a & 1) << 1) + (b & 1);
if (cond == 0) { factor <<= 1; a >>= 1; b >>= 1; }//even, evenelseif (cond == 1){ a >>= 1; }//a = even, b = oddelseif (cond == 2){ b >>= 1; }//a = odd, b = evenelse {
longlongint t = a;
a = b;
b = t - b; //#a = odd, b = odd
}
}
return a*factor;
}
python实现
defgcd1(a,b):if a<b:return gcd1(b,a)
while b:
a,b = b,a%b
return a
defgcd2(a,b):if a<b:return gcd2(b,a)
while a!=b:
a,b = b,a-b
if a< b:a,b = b,a
return a
defgcd3(a,b):if a<b:gcd3(b,a)
factor = 0while a!=b:
if a<b: a,b = b,a
cond = ((a&1)<<1)+(b&1)
if cond==0:a=1;b>>=1;factor += 1#even,evenelif cond==1:a,b = a>>1,b #a = even,b = oddelif cond==2:a,b = a,b>>1#a = odd,b = evenelse:a,b = b,a-b #a = odd,b = oddreturn a*(1<<factor)