3 ms·
Here's a version that at least for 64 bit might be faster: bool isPerfect(uint64_t x) { int ctz = __builtin_ctzll(x); return ((0x40051056 >>
by hairtuq 7y ago
Here's a version that at least for 64 bit might be faster:
bool isPerfect(uint64_t x) {
int ctz = __builtin_ctzll(x);
return ((0x40051056 >> ctz) & 1) && ((x >> ctz) + 1) == (uint64_t(1) << (ctz + 1));
}