# 题目描述

给定 nnai,bi,pia_i,b_i,p_i,对于每组数据,求出 aibia_i ^ {b_i} modmod pip_i 的值

# 算法思路

对于数 aibia_i ^ {b_i} modmod pip_i 有,bib_i 可以拆成二进制表示
454^5 modmod 1010 为例
55 的二进制表示为 101101

45=420422\Large\color{red}{4^5 = 4^{2^0} * 4^{2^2}}

不断取出 bib_i 的最后一位,在取的过程中,aa 不断平方

c++
1
2
3
4
5
6
7
8
9
int qmi(int a, int b, int p) {
int res = 1;
while(b) {
if(b & 1)
res = res * a % p;
b >>= 1, a = a * a % p;
}
return res;
}