从CF1875C学习lowbit运算判断是否为 2 的 k 次幂

Problem - 1875C - Codeforces

本题判断无解的时候要判断该数是否为 2 的 k 次幂,我的做法是预处理出 2 的次幂数表。

看题解发现可以用 lowbit 操作。

lowbit操作

int lowbit(int x) {return x & (-x);}

根据补码原理,该操作可以求出来 X 最靠右的 \(1\) 构成的数。

判断 \(x\) 是否为 \(2^k\)

显然,一个数为 \(2^k\) 当且仅当该数在二进制上仅一位为 \(1\),也就是说 lowbit 出来的结果是等于 x 的。

if(lowbit(x) == x)

当然,还可以直接if((x & (x - 1)) == 0)

posted @ 2024-01-22 16:39  加固文明幻景  阅读(9)  评论(0编辑  收藏  举报