图片说明
对于这个题目,我们可以知道,其实就是一个快速幂的写法。

//非递归的写法
#include<iostream>
using namespace std;
typedef long long ll;
int main(){
    ll a,b,mod;
    cin>>a>>b>>mod;
    ll ans=1;
    while(b){
        if(b&1) ans=ans*a%mod;
        b>>=1;
        a=a*a%mod;
    }
    cout<<ans%mod<<endl;
    return 0;
}
//递归的写法
#include<iostream>
using namespace std;
typedef long long ll;
ll a,b,mod;
ll qk(ll a,ll b){
    if(b==0) return 1;
    if(b&1) return a*qk(a,b-1)%mod;
    else{
        ll mul=qk(a,b/2);
        return mul*mul%mod;
    }
}
int main(){
    cin>>a>>b>>mod;
    ll ans=qk(a,b);
    cout<<ans%mod<<endl;
    return 0;
}

这里要注意的是我们可能会存在不会经过while的情况,所以记得最后还得mod一次,比如:1 0 1的情况,如果不mod的话最后就是1,其实是0,这里要注意一下。