如何在java中找到像2 ^(10 ^ 9)这样的数的幂的幂

时间:2013-11-01 19:56:36

标签: java

Math.pow()返回一个double值,只接受int作为参数... BigInteger没有找到BigInteger的函数^ BigInteger 通过循环完成它需要很长时间...... 我还有什么方法可以错过吗?

Thnx提前......

4 个答案:

答案 0 :(得分:7)

您可以使用BigInteger.pow()获取大型指数。由于10 9 符合int并且也可以完全表示为double,因此您可以这样做:

int exp = (int) Math.pow(10, 9);
BigInteger answer = BigInteger.valueOf(2).pow(exp);

对于大于Integer.MAX_VALUE的指数,这显然会中断。但是,您可以使用BigInteger.modPow(BigInteger exponent, BigInteger m)BigInteger提升为另一个BigInteger作为权力,将模块提升为第三个BigInteger。您只需要首先创建一个大于预期答案的BigInteger作为模数。

答案 1 :(得分:3)

如果你有2 ^ x,其中x是一个大数字,那么你可以通过位移来实现。示例:

2^4 == (1 << 4);
2^12 == (1 << 12);

使用BigIntegers,您可以使用shiftLeft()和shiftRight()方法执行相同的操作。

答案 2 :(得分:1)

  

Math.pow()返回一个double值,只将int作为参数。

不,它需要两个双打并返回一个双倍:Javadoc

如果你不需要确切的答案,它可能会很好。

答案 3 :(得分:1)

你可以使用战俘,但左移可能会更快。

 BigInteger bi = BigInteger.ONE.shiftLeft(1_000_000_000);

BigInteger.pow(BigInteger)不支持的原因可能是即使是最简单的例子,你需要比世界上任何计算机都要多的内存来保存这样的值。需要BigInteger指数的最小值是2 ^ 63且2 <2 ^ 63需要2 ^ 60字节的内存或1万亿GB。