对于这个题目,我们可以知道,其实就是一个快速幂的写法。
//非递归的写法
#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,这里要注意一下。

京公网安备 11010502036488号