我有一个问题,我必须计算数组中大数字的总和并返回结果。例如arr = [10,12,34,56]然后输出应该是 10 ^ 1 + 12 ^ 2 + 34 ^ 3 + 56 ^ 4.这里的输出可能非常大,所以我们被要求在输出上取一个10 ^ 10 + 11的模数然后返回它。我很容易在python,但在java最初我使用BigInteger,并得到了一半的测试用例,所以我想使用Long然后使用模块指数计算功率,但后来得到错误的输出准确都是负的,因为它明显超出限制。 / p>
这是我使用Long和Modular指数的代码。
static long power(long x, long y, long p)
{
long res = 1; // Initialize result
x = x % p; // Update x if it is more than or
// equal to p
while (y > 0)
{
// If y is odd, multiply x with result
if ((y & 1)==1)
res = (res*x) % p;
// y must be even now
y = y>>1; // y = y/2
x = (x*x) % p;
}
return res;
}
static long solve(int[] a) {
// Write your code here
Long[] arr = new Long[a.length];
for (int i = 0; i < a.length; i++) {
arr[i] = setBits(new Long(a[i]));
}
Long Mod = new Long("10000000011");
Long c = new Long(0);
for (int i = 0; i < arr.length; i++) {
c += power(arr[i], new Long(i + 1),Mod) % Mod;
}
return c % Mod;
}
static long setBits(Long a) {
Long count = new Long(0);
while (a > 0) {
a &= (a - 1);
count++;
}
return count;
}
然后我也尝试了Binary Exponentiation,但没有任何对我有用。如何在不使用大整数的情况下实现这一点,就像我在python中得到它一样容易
答案 0 :(得分:0)
你已经为mod的值添加了额外的零,它应该是1000000011。 希望这能解决它