Hello, many times you need to calculate lg2(n) and usually you need just to calculate floor of that. may these functions help you.
/// there are in O(1) and they work for int and long long numbers that is greater than 0
int lg2(const int &x){return 31 - __builtin_clz(x);}
long long int lg2(const long long int &x){return 63 - __builtin_clzll(x);}
You do not need
const&
for primitives. I'm not sure if the reference gets ignored or optimized out, but either way it's a code smell.C++ (at least C++17) already offers the function
__lg()
that does exactly this.Ctrl+F through C++20 standard not found any
__lg()
function. Maybe it's just gcc implementation?Yes, I think it's only for gcc. Anyways, why would you choose another compiler instead of GCC? Official competitions (like ICPC/IOI) use GCC, and also you have some things in GCC that are not available in other compilers.
__lg()
is C++ function.bits/stdc++
.