题目
//任务计算a^b对1337取模,a是一个正整数,b是一个非常大的正整数(以数组形式给出)
//例如: input: a = 2 , b=[3]
// output: 8
// input: a = 2 , b=[1,0]
// output: 1024
知识点
//(ab)%k = ((a%k)(b%k))%k
//(a+b)%k = ((a%k)+(b%k))%k
方法一
int pow1(int x,int y){
if (y == 0) return 1;
if (y == 1) return x % 1337;
return ((pow1(x,y/2)%1337)*(pow1(x,y-y/2)%1337))%1337;
}
int solve1(){
int res = 1;
for (int i=0;i<n;i++) res = pow1(res,10)*pow1(a,b[i])%1337;
return res;
}
方法二
int pow2(int a,int b){
int res = 1;
int p = a;
while(b>0){
if ((b & 1) == 1){
res = (res*p) % 1337;
}
p = (p*p)%1337;
b >>= 1;
}
return res;
}
int solve2(){
int res = 1;
int p = a;
for (int i=n-1;i>=0;i--){
res = res * pow2(p,b[i])%1337;
p = pow2(p,10);
}
return res;
}