algorithm - 测试一个大整数是否是 2 的幂

标签 algorithm biginteger

给定一个整数(以二进制形式存储),我如何快速测试它是否是 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/

相关文章:

python - 为什么我不能在没有列表的情况下检查字符串的比较?

ios map 捕捉到道路实现

c - 如何处理不适合任何语言数据结构的大整数

java - 从 BigDecimal 获取约简分数

java - 这两种方法(一种是整数,一种是 BigInteger 类型)是否匹配?

java - 如何在不使用 java.math.BigInteger 的情况下在 Java 中处理非常大的数字

algorithm - 存储大量数字如何增加空间复杂度?

algorithm - 有约束的资源分配算法

在电子表格中查找循环引用的算法

C# 如何在这个 Lambda 表达式中使用 BigInteger?