你的任务是计算 a^b mod 1337,其中 a 是一个正整数,b 是一个超级大的正整数,以数组的形式给出。
- b 数组的长度在范围 [1, 1100] 之内。
样例
样例1
输入:
a = 2
b = [3]
输出:
8
样例2
输入:
a = 2
b = [1,0]
输出:
1024
int mul2(int a, int b)
{
if (b == 0)
{
return 1;
}
int ret = 1;
while (b != 1)
{
if (b % 2 == 0)
{
a = a*a % 1337;
b =b/2;
}
else
{
ret = ret *a % 1337;
b--;
}
}
ret = ret*a % 1337;
return ret;
}
int superPow(int a, vector<int> &b) {
// Write your code here
int ret=1;
a = a % 1337;
int size = b.size();
bool bflag = true;
while(b.size()>0)
{
int back = b[b.size() - 1];
if (true == bflag)
{
ret = ret* mul2(a, back) % 1337;
b.pop_back();
bflag = false;
continue;
}
a = mul2(a, 10);
bflag = true;
}
return ret;
}
标签