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