首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BigInteger.pow(BigInteger)?

BigInteger.pow(BigInteger)?
EN

Stack Overflow用户
提问于 2011-01-03 13:39:34
回答 8查看 39.9K关注 0票数 26

我正在用Java玩数字游戏,我想看看我能做多大的数字。据我所知,BigInteger可以容纳无限大的数字,只要我的计算机有足够的内存来容纳这样的数字,对吗?

我的问题是BigInteger.pow只接受一个整数,而不接受另一个BigInteger,这意味着我只能使用最大2,147,483,647的数字作为指数。可以这样使用BigInteger类吗?

代码语言:javascript
复制
BigInteger.pow(BigInteger)

谢谢。

EN

回答 8

Stack Overflow用户

发布于 2011-01-03 14:16:57

您可以使用repeated squaring编写自己的代码

代码语言:javascript
复制
BigInteger pow(BigInteger base, BigInteger exponent) {
  BigInteger result = BigInteger.ONE;
  while (exponent.signum() > 0) {
    if (exponent.testBit(0)) result = result.multiply(base);
    base = base.multiply(base);
    exponent = exponent.shiftRight(1);
  }
  return result;
}

对于负基或指数可能不起作用。

票数 23
EN

Stack Overflow用户

发布于 2013-01-11 01:32:16

在Java语言中,你只能通过模算术来实现这一点,这意味着你可以做一个a^b mod c,其中a,b,c是BigInteger数。

这是使用以下命令完成的:

代码语言:javascript
复制
 BigInteger modPow(BigInteger exponent, BigInteger m) 

Read the BigInteger.modPow documentation here.

票数 13
EN

Stack Overflow用户

发布于 2011-01-03 17:18:16

BigInteger的底层实现限制为(2^31-1) *32位值。这几乎是2^36位。您将需要8 GB的内存来存储它,并且需要很多次这样的内存来对它执行任何操作,比如toString()。

顺便说一句:你永远不会读到这样的数字。如果你想把它打印出来,你可能要花一生的时间才能读完。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4582277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档