题解:P9401 [POI 2020/2021 R3] Kolekcjoner Bajtemonów 2
试机题。
果然是我太菜了。
注意到
又发现
然而直接朴素地查复杂度是
然后需要注意一下常数。gcd 需要用 Binary GCD。
int gcd(int a, int b) {
int az = __builtin_ctz(a);
int bz = __builtin_ctz(b);
int z = min(az, bz);
b >>= bz;
while (a) {
a >>= az;
int diff = a - b;
az = __builtin_ctz(diff);
b = min(a, b), a = abs(diff);
}
return b << z;
}