#include<bits/stdc++.h>
using namespace std;
typedef long long ll; //注意要用long long,用int会出错
ll fastPow(ll a, ll n,ll m){ //a**n mod m
if(n == 0) return 1; //特判 a0= 1
if(n == 1) return a;
ll temp = fastPow(a, n/2,m); //分治
if(n%2 == 1) return temp * temp * a % m; //奇数个a。也可以这样写: if(n &1)
else return temp * temp % m ; //偶数个a
}
int main(){
ll a,n,m; cin >> a >> n>> m; //底数、指数、取模
cout << fastPow(a,n,m);
return 0;
}
笔记:快速幂就是快速高效的算出幂,当指数很大时,暴力法算出的结果会超时,分治算法可以将大问题,划分成多个小问题解决。
取余:靠近0原则,取模:商取小原则
