私は配列の大きな累乗の和を計算して結果を返さなければならない問題がありました。たとえば、arr = [10,12,34,56]の場合、出力は 10^1 + 12^2 + 34^3 + 56^4.出力が非常に大きいので、出力で10^10 + 11のmodを取って返すように求められました。 Pythonが最初にJavaで私はBigIntegerを使用し、テストケースの半分のためにトールを得たので、私はロングを使用して、モジュール指数関数を使用して電力を計算すると思ったが、私は明らかに限界を超えたので、大きな整数を使用しないで大きな力
ここでは、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;
}
は、私はまた、バイナリ累乗を試してみましたが、何も私は大きな整数を使用せずにこれを達成んme.Howのために働いていないと同じように簡単私のpython
BigIntegerはどのくらい正確に失敗しましたか?そのライブラリを使用すると、ここで最も簡単にコード化できるソリューションになるでしょうか? – GhostCat
@GhostCatテストケースの半分が苦労しました – ani
あなたがすでに言ったことを繰り返しています。トールは意味する?しかし、それについて考えてみましょう。あなたは正しいです - モジュロソリューションを稼働させることに焦点を当てるべきです。より小さな数値で計算する方が常に効率的です。 – GhostCat