一、问题描述
Your task is to calculate ab mod 1337 where a is a positive integer and b is an extremely large positive integer given in the form of an array.
Example1:
a = 2 b = [3] Result: 8
Example2:
a = 2 b = [1,0] Result: 1024
二、思路
1140是如何计算出来的?
phi(1337) = phi(7) * phi(191) = 6 * 190 = 1440
根据ab %
1337 = ab % phi(1337) % 1337 = ab % 1140 %
1337.
所以我们需要两个函数分别处理指数和底数分别对1140和1337求余。
三、代码
class Solution {
public:
int superPow(int a, vector<int>& b) {
if(a % 1337 == 0) return 0;
int index = 0;
for(int i : b)
index = (index * 10 + i) % 1140;
if(index == 1140)
index = index + 1140;
return power(a,index,1337);
}
int power(int x, int n, int mod) {
int result = 1;
for(x = x % mod; n; x = x * x % mod,n = n >> 1)
if(n & 1)
result = result * x % mod;
return result;
}
};