找到一个大整数是十的幂的最快方法是什么?

时间:2013-12-28 08:37:04

标签: math biginteger logarithm

我可以在循环中使用除法和模数,但对于非常大的整数来说这很慢。该数字存储在基数2中,可能大到2 ^ 8192。我只需要知道它是否是10的幂,所以我认为可能有一个快捷方式(除了使用查找表)。

2 个答案:

答案 0 :(得分:8)

如果你的数字x是10的幂,那么

x = 10^y

表示某个整数y,表示

x = (2^y)(5^y)

因此,将整数向右移动直到不再有尾随零(应该是一个非常低成本的操作)并计算移位的位数(称为k)。现在检查剩余数量是否为5 ^ k。如果是,那么你的原始数字是10的幂。否则,它不是。由于2和5都是素数,因此总是有效。

答案 1 :(得分:0)

假设X是您的输入值,我们从假设开始。

X = 10 ^ Something

其中SomethingInteger

所以我们说以下内容:

log10(X) = Something.

因此,如果X强大10,则Something将为Integer

实施例

int x = 10000;
double test = Math.log10(x);

if(test == ((int)test))
    System.out.println("Is a power of 10");