gpt4 book ai didi

java - 变量太大的数字

转载 作者:行者123 更新时间:2023-11-29 06:32:28 24 4
gpt4 key购买 nike

我要找出 1^1 + 2^2 + 3^3.. + 1000^1000 的最后十位数字。有什么办法可以用纯逻辑找出答案吗?我认为您无法存储那么大的数字。

这道题来自数学竞赛,但我想尝试用 Java 来做这道题。

最佳答案

你不需要存储那么大的数字,你只需要最后十位数字。您可以将其长期存储。

计算大幂的有效方法是乘以平方,例如19^19 = 19 * 19^2 * 19 ^ 16 = 19 * 19 ^ 2 * 19^2^2^2^2。当您的值大于 10^10 时,您可以截断最后 10 位数字。

顺便说一句,1000^1000 的最后十位数字是 0000000000,当您将其添加到您的总和中时,它与添加零相同;)


编辑:虽然您不必使用 BigInteger,但编写起来更简单。

BigInteger tenDigits = BigInteger.valueOf(10).pow(10);
BigInteger sum = BigInteger.ZERO;
for (int i= 1; i <= 1000; i++) {
BigInteger bi = BigInteger.valueOf(i);
sum = sum.add(bi.modPow(bi, tenDigits));
}
sum = sum.mod(tenDigits);

modPow 比单独使用 modpow 更有效,因为它不需要计算非常大的数字,只需计算修改

关于java - 变量太大的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29676713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com