如何在java中以String格式计算大数的模

Posted

技术标签:

【中文标题】如何在java中以String格式计算大数的模【英文标题】:How can I calculate modulo of a large number in String format in java 【发布时间】:2016-09-28 22:40:38 【问题描述】:

我正在尝试在 Java 中计算字符串中的表达式 IE 99999999999999999^99999999999999999 我想以1000000007 为模来计算这个数字。 我目前试图将大数字存储为双倍,但以双倍取模给我NaN。 有人可以帮忙吗?

【问题讨论】:

99999999999999999^99999999999999999 是一个相当大的数字。你将不得不应用数学而不是蛮力。 定义“我试过”和“没用”。 你知道99999999999999999^99999999999999999的实际值是多少吗?你甚至无法在合理的时间内计算出这个数字。更不用说用它做任何计算了。 除非您发布,否则我们无法帮助您解决您尝试过但没有成功的方法。 @piyush121 如果你有兴趣了解 Big modulo 的数学背后,可以查看link 【参考方案1】:

你可以使用BigIntegermodPow(BigInteger, BigInteger)like

BigInteger m = new BigInteger("1000000007");
BigInteger a = new BigInteger("99999999999999999");
BigInteger b = new BigInteger("99999999999999999");
BigInteger answer = a.modPow(b, m);
System.out.println(answer);

给了

265859324

【讨论】:

就是这个。

以上是关于如何在java中以String格式计算大数的模的主要内容,如果未能解决你的问题,请参考以下文章

大数乘法的模[重复]

如何在java(android)中以posix格式打印本地时区?

如何在 PHP 中以 HTML 格式显示 XML?

如何在 html 页面中以适当的格式显示 CPP、Java 或任何其他编程语言代码? [关闭]

如何在Java中以字符串格式获取当前时间戳? “yyyy.MM.dd.HH.mm.ss”

如何在 Java 中以 YYYY-MM-DD HH:MI:Sec.Millisecond 格式获取当前时间?