给定一个大整数(以二进制形式存储),我如何快速测试它是否是 2 的幂,即等于整数指数 k 的 2ᵏ?
一个简单但比较慢的方法是不断除以2,直到数字变成2或者有非零余数。不幸的是,我们需要执行与数字中的数字一样多的除法。
对于小整数,有许多解决方案,包括位计数等。我对具有任意位数的整数的快速解决方案很感兴趣。例如。我们可以通过一些快速整数除以 2 或其他技巧来加速上述方法吗?
最佳答案
我认为最快的方法仍然是检查位。假设您的数字是 x,在 java 中您可以执行 x & (x - 1) == 0
如果为真则它将是 2 的幂
对于 BigInteger,您可以执行 x.and(x.subtract(BigInteger.ONE)).equals(BigInteger.ZERO)
关于algorithm - 测试一个大整数是否是 2 的幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42964882/