你的任务是计算
ab
对1337
取模,a
是一个正整数,b
是一个非常大的正整数且会以数组形式给出。
题解:这一道主要就是考的取模运算和快速幂,我这一道没有用快速幂,但是思想是一样。
就是算次方然后取模,主要注意的就是不能越界。
取模的公式:
(a + b) % p = (a%p + b%p) %p (对)
(a - b) % p = (a%p - b%p) %p (对)
(a * b) % p = (a%p * b%p) %p (对)
(a / b) % p = (a%p / b%p) %p (错)
(a / b) % p = (a * inv(a) ) % p = (a % p * inv(a) % p) % p
class Solution {//因为数可能太大,需要每次取模
public:
int superPow(int a, vector<int>& b) {
int nums=a%1337; //防止a过大
int ret=1;
for(int i=b.size()-1;i>=0;i--){ //每循环一次,第二次就是10次方倍放大
int lastnums=nums;
for(int j=1;j<10;j++){
if(j==b[i]){ //数组每取一次的值
ret = nums*ret%1337;
}
nums=nums*lastnums%1337;
}
}
return ret;
}
};