以最佳方式计算x到x的功率

时间:2011-06-09 14:28:27

标签: java c++ c algorithm logic

  

可能重复:
  The most efficient way to implement an integer based power function pow(int, int)

我知道这个问题很简单,但我的要求是我想要计算x来驱动x,其中x是一个非常大的数字,以尽可能最佳的方式。我不是一个数学极客,因此需要一些帮助来找出最好的方法。

在java中,我们可以使用BigInteger但是如何优化代码?任何特定的优化方法?

同样使用递归会得到x的大值,会使代码变慢并且容易出现堆栈溢出错误吗?

例如:457474575加权457474575

3 个答案:

答案 0 :(得分:12)

你确实意识到你的例子的答案将是一个非常大的数字,即使对于BigInteger也是如此?它将有3961897696位数!

使用非常大的数字的最佳方法,如果你不需要精确的精确度,就是使用它们的对数代替。要将x取为x幂,请取x的对数并乘以x。如果你需要将它转换回来,请把e带到x exp(x),除非在这种情况下它几乎肯定会溢出。

答案 1 :(得分:1)

这是最简单的优化方法之一:

x^1*x^1=x^2
x^2*x^2=x^4
etc...
x^x = x^(x/2)*x^(x/2)*remainder

答案 2 :(得分:1)

((BigInteger)457474575).pow(457474575);