📜  cpp 中 2 的幂 - C++ (1)

📅  最后修改于: 2023-12-03 15:00:02.999000             🧑  作者: Mango

C++ 中的 2 的幂

在C++中,2的幂指的是2的整数次幂,如2、4、8、16等。在很多算法和数据结构中,2的幂经常被用到。

实现方法
方法1:位运算

我们可以利用位运算来判断一个数是否是2的幂。对于一个2的幂,它的二进制表示中只有一位是1,其余位都是0。那么,这个数减去1后二进制表示中则所有位都为1,继续和原数进行按位与运算,结果应该为0。

bool isPowerOfTwo(int n) {
    if (n <= 0) return false;  // 特判
    return (n & (n - 1)) == 0;
}

时间复杂度为O(1),空间复杂度为O(1)。

方法2:数学方法

我们可以利用数学方法来判断一个数是否是2的幂。如果一个数是2的幂,那么它的二进制表示一定是类似于1000、10000、100000这样的形式。那么,我们可以将这个数每次除以2,直到余数不为0或者得到1,如果最终得到的结果是1,那么这个数就是2的幂。

bool isPowerOfTwo(int n) {
    if (n <= 0) return false;  // 特判
    while (n % 2 == 0) {  // 如果n是偶数,不断除以2
        n /= 2;
    }
    return n == 1;  // 如果最终得到的结果是1,那么这个数就是2的幂
}

时间复杂度为O(logn),空间复杂度为O(1)。

应用场景

一些出现2的幂次方的算法和数据结构:

  1. 布隆过滤器
  2. 线段树
  3. 二叉堆
  4. 快速幂
  5. 求幂次方和
总结

2的幂在很多算法和数据结构中被广泛应用。在实现时可以利用位运算或数学方法来判断一个数是否是2的幂。对于不同的场景选择不同的实现方法可以使代码更加简洁高效。