【发布时间】:2016-10-12 17:07:58
【问题描述】:
我有一个数字(以 10 为底)表示为最多 10^6 位的字符串。我想检查这个数字是否是 2 的幂。我能想到的一件事是对指数进行二进制搜索并使用 FFT 和快速取幂算法,但它的代码相当长且复杂。让 n 表示输入的长度(即输入中的小数位数)。作为 n 的函数,解决这个问题最有效的算法是什么?
【问题讨论】:
-
您使用的是哪种语言?
-
C++,但是自己写算术没问题。
-
如果复杂度没有问题,那么您可以简单地遍历 String 并将其除以 2,最后如果剩下 1,则 number 是 2 的幂数。
-
有很多必要(但不充分)的条件很容易检查。例如,测试最后一位是否为偶数将消除 50% 的数字。
-
好吧,正如您所见,我的解决方案包含快速傅里叶变换和其他一些复杂的算法,因此复杂性是一个问题。这不是一个基本的编程问题。