太久没打算法题,连快速幂的幂都给模上了,错了2遍才发现。。。
不加快速乘也能过,但是为了掌握一下快速乘(刚学,原来这么简单),也写上去了
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int inf=0x3f3f3f3f; 4 typedef long long ll; 5 ll kadd(ll a,ll b,ll p) { ///快速乘 6 ll ans=0; 7 while(b) { 8 if(b&1) ans=(ans+a)%p; 9 a=(a<<1)%p; 10 b>>=1; 11 } 12 return ans; 13 } 14 ll kpow(ll a, ll b, ll p) { ///快速幂 15 ll ans=1; 16 while(b) { 17 if(b&1) ans=kadd(ans,a,p); 18 a=kadd(a,a,p); 19 b>>=1; 20 } 21 return ans; 22 } 23 int main() 24 { 25 ll a,b,p; 26 cin>>a>>b>>p; 27 ll res=kpow(a%p,b,p); 28 cout<<res<<endl; 29 return 0; 30 }
原文:https://www.cnblogs.com/wuliking/p/12656044.html