2 條題解
- 1
資訊
- ID
- 9
- 時間
- 1000ms
- 記憶體
- 256MiB
- 難度
- 2
- 标签
- 遞交數
- 26
- 已通過
- 13
- 上傳者
考虑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
哥哥好腻害