2 条题解
- 1
信息
- ID
- 9
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 15
- 已通过
- 9
- 上传者
考虑2的整数次幂的性质
n 的二进制表示只有一个 1
那么怎么快速判断呢?
考虑 n−1 ,它的二进制表示是多少呢?
肯定比 n 小。
比如:16=(1000)2 那么 15=(0111)2
可以观察发现他们所有位都发生了交换,所以我们让他们进行与运算,最后答案就变成 0 了。
即我们只需要判断 n&(n−1)=0
法2:lowbit
lowbit:返回二进制表示的最后一个1
所以我们直接判断 lowbit(n) 是否等于 n
lowbit运算公式:n & -n
哥哥好腻害