# Super Pow in C++

Suppose we have to calculate a^b mod 1337 where a is one positive integer and b is an extremely large positive integer given in the form of an array. So if a = 2 and b = [1,0] then the output will be 1024

To solve this, we will follow these steps −

• Define powerMod() method this takes base and power

• m := 1337, ret := 1

• while power is not 0

• if power is odd, then ret := ret * base mod m

• base := base^2 mod m

• power := power / 2

• return ret

• Define superPower(), this takes a and b

• if size of b = 0, then return 1

• last := last element of b

• delete last element from b

• return powerMod(superpower(a, b), 10) * powerMod(a, last)) mod 1337

## Example(C++)

Let us see the following implementation to get a better understanding −

Live Demo

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
int powerMod(lli base, lli power){
lli mod = 1337;
lli ret = 1;
while(power){
if(power & 1) ret = (ret * base) % mod;
base = (base * base) % mod;
power >>= 1;
}
return ret;
}
int superPow(int a, vector<int>& b) {
if(b.size() == 0) return 1;
int last = b.back();
b.pop_back();
return (powerMod(superPow(a, b), 10) * powerMod(a, last)) % 1337;
}
};
main(){
Solution ob;
vector<int> v = {1,0};
cout << (ob.superPow(2, v));
}

## Input

2
[1,0]

## Output

1024