底数十进制倍增原理:
x表示乘法
2435
=2400 x 230 x 25
=(2100)4 x (210)3 x (21)5
类似一般快速幂,应该很容易懂
可以处理212345466…%p 这种大数幂式子
例题:P5091
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#define set0(a) memset(a,0,sizeof(a))
#define set1(a) memset(a,-1,sizeof(a))
#define setinf(a) memset(a,0x3f3f3f3f,sizeof(a))
#define ll long long
#define P pair<int,int>
#define mp(a,b) make_pair(a,b)
const int inf=0x3f3f3f3f;
const int inn=-(1<<30);
using namespace std;
ll ppow(ll a,ll b,ll p){
ll ans=1%p;
while(b){
if(b&1)ans=ans*a%p;
a=a*a%p;
b>>=1;
}
return ans;
}
int main(){
ll a,p;
string b;
cin>>a>>p>>b;
int len=b.size();
ll ans=1%p;
for(int i=len-1;i>=0;i--){
int t=b[i]-'0';
ans=ans*ppow(a,t,p)%p;
a=ppow(a,10,p);
}
cout<<ans<<endl;
return 0;
}