如何在Java中找到n的n次方

3

我正在尝试寻找一种在Java中高效计算N^N的方法。由于当N较大时结果会非常大,因此我使用了BigInteger作为我的结果数据类型,并且N是整数。如果N变得很大,比如N=10000000,那么计算结果需要更长的时间。是否有一种有效的方法可以在一秒内计算出它。


15
我怀疑这个。那是一个相当大的数字。 - Keppil
1
你真的需要那个数字吗?整个数字?因为每秒钟你不太可能需要一个七千万位数(十进制)。如果你只需要其中的一部分,比如前几位数字,那么有办法可以帮助你。 - Carsten
3
去买一台超级计算机! - Tdorno
1
@zch 当然可以做到,而且不算太难,但是在一秒钟内完成并不容易。我仍然认为这不是 OP 需要的东西。 - Carsten
3
这似乎需要更长的讨论。我们可以请在聊天室里继续讨论吗?我能为您做些什么? - Carsten
显示剩余19条评论
1个回答

8
在您的程序中处理数字的对数,即N ln(N)。随着N的增长,相对于N^NN ln(N)的大小会越来越快地缩小。
您需要根据您所需的内容来实现这一点。如果您不需要在程序中使用N^N,那么只需忘记它,在程序输出后在纸上计算即可。当您处理如此大的数字时,其对数/数量级/位数(所有这些都是同义词)是最重要的信息。如果您的程序输出x,则应报告答案约为e^x,这就是您能说的全部。
如果您确实需要在程序中使用N^N,那么您仍然应计算x = ln(N^N) = N ln(N)。但是,您将不得不想出一些创造性的方法,从x转换为您的程序实际可以使用的某个值。

相当不错的回答。只关注你关心的,把其他的留在一边。 - Makoto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接