Math.pow()返回一个double值,只接受int作为参数... BigInteger没有找到BigInteger的函数^ BigInteger 通过循环完成它需要很长时间...... 我还有什么方法可以错过吗?
Thnx提前......
答案 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)
答案 3 :(得分:1)
你可以使用战俘,但左移可能会更快。
BigInteger bi = BigInteger.ONE.shiftLeft(1_000_000_000);
BigInteger.pow(BigInteger)不支持的原因可能是即使是最简单的例子,你需要比世界上任何计算机都要多的内存来保存这样的值。需要BigInteger指数的最小值是2 ^ 63且2 <2 ^ 63需要2 ^ 60字节的内存或1万亿GB。