把 b 转化为二进制 2^p1 + 2^p2 + 2^p3…
例如 9 = 1001
每次while循环计算“1”的情况:a^1 + a^8
b & 1
b >> 1当然需要每次计算%一次,防止溢出。
#include<bits/stdc++.h>
using namespace std;
int main(){
long long a, b, p;
cin >> a >> b >> p;
int res = 1 % p;//处理b为0 的情况
while(b){
if( b & 1 ) res = res * a % p;
a = a * a % p;
b >>= 1;
}
cout << res << endl;
return 0;
}