2017-07-16 14 views
1

私は配列の大きな累乗の和を計算して結果を返さなければならない問題がありました。たとえば、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

+0

BigIntegerはどのくらい正確に失敗しましたか?そのライブラリを使用すると、ここで最も簡単にコード化できるソリューションになるでしょうか? – GhostCat

+0

@GhostCatテストケースの半分が苦労しました – ani

+0

あなたがすでに言ったことを繰り返しています。トールは意味する?しかし、それについて考えてみましょう。あなたは正しいです - モジュロソリューションを稼働させることに焦点を当てるべきです。より小さな数値で計算する方が常に効率的です。 – GhostCat

答えて

0

でそれを得たとして、あなたは余分なゼロに値を追加しましたmod、それは1000000011でなければなりません。 これで解決したいと思っています

+0

いいえ...まだ間違った答えがあります – ani

+0

問題へのリンク – neilharia7

関連する問題