给定a,n,m,请你计算a^n mod m的值。
a,m <= 10^9,n <= 10^1000
方法:修改快速幂算法。
输入的数据以十进制给出,为了避免高精度的进制转换,我们可以将快速幂算法迁移到十进制。
例如k=1093425
ak=(a1)5*(a10)2*(a100)4*(a1000)^3…
所以我们只需要算出a1,a10,a^100…
类似地,我们可以用递推来算以上的序列
一个数为前一个数的十次方
int b[N],n; //高精度数,表示n
int ksm(int a,int m) {
int ans=1;
for(int i=0;i<n;++i) {
for(int j=0;j<b[i];++j) ans=1ll*ans*a%m;
int tmp=1;
for(int j=0;j<10;++j) tmp=1ll*tmp*a%m;
a=tmp;//乘十次
}
return ans;
}