利用分治法将很大的数拆分成多份,分别区余数。
例如:
2^433852可以分成
2^(43385*10+2) ==> (2^43385)^10 ==> (2^43385)^10*2^2
public class LC0372 {
int mol=1337;
public int superPow(int a, int[] b) {
return dfs(a,b,b.length-1);
}
int dfs(int a,int[] b,int n){
if(n==-1)return 1;
return pow(dfs(a,b,n-1),10)*pow(a,b[n])%mol;
}
int pow(int a,int b){
int ans=1;
a%=mol;
while (b-- >0){
ans*=a;
ans%=mol;
}
return ans;
}
public static void main(String[] args) {
LC0372 lc=new LC0372();
System.out.println(lc.superPow(2147483647,new int[]{2,0,0}));
}
}