1.常用快速幂
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll x,y,p;
ll ksm1(ll a,ll b,ll mod){
ll res=1;
while(b){
if(b&1)res=(res*a)%mod;
b>>=1;
a=a*a%mod;
}
return res;
}
int main(){
cin>>x>>y>>p;
cout<<ksm2(x,y,p);
return 0;
}
2.当y次方过大时,须用string来表示y,ksm改进
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll x,p;string y;
ll ksm2(ll a,string b,ll mod){
ll res=1;
//从个位开始到最高位依次遍历,只需遍历一次,每次将a放大十倍
for(int i=b.size()-1;i>=0;i--){
for(int j=1;j<=b[i]-'0';j++){
res=res*a%mod;
}
int n=10,a1=1;
while(n--){
a1=a1*a%mod;
}
a=a1;//将a放大十倍
}
return res;
}
int main(){
cin>>x>>y>>p;
cout<<ksm2(x,y,p);
return 0;
}