此题作为算法竞赛进阶指南的第一题,考察了快速幂和模运算。
题目链接:89. a^b - AcWing题库
题意: 给出1e9范围内的三个数a, b,p, 计算a ^ b % p的值。
分析: b的范围已经到1e9,常规线性相乘一定会超时,所以需要用到快速幂处理。快速幂可以这样理解: 对于a ^ p, 相当于p个a相乘, 如果p是偶数,就可以变为p/2个a*2相乘, 以此类推。如果进行到某一步p变成奇数了,那么我们可以把其中之一乘到ans里,剩下的就又是偶数了。
求模运算: (a * b) % p = (a % p) * (b % p) % p.
代码:
#include<bits/stdc++.h>
#define map unordered_map
using namespace std;
typedef long long ll;
ll a, b;
ll p;
ll ksm(){
ll res = 1;
while(b){
if(b & 1) res = res * a % p;
a = a * a % p;
b >>= 1;
}
return res % p;
}
void solve(){
cin>>a>>b>>p;
cout<<ksm();
}
int main(){
cin.tie(0) -> sync_with_stdio(false);
//int t; cin>>t; while(t --)
solve();
}