题目描述
给定n组 a i , b i , p i a_i,b_i,p_i ai,bi,pi,对于每组数据,求出 a i b i m o d p i a_i^{b_i} mod p_i aibimodpi的值。
输入格式
第一行包含整数n。
接下来n行,每行包含三个整数 a i , b i , p i a_i,b_i,p_i ai,bi,pi。
输出格式
对于每组数据,输出一个结果,表示 a i b i m o d p i a_i^{b_i} mod p_i aibimodpi的值。
每个结果占一行。
数据范围
1
≤
n
≤
100000
,
1≤n≤100000,
1≤n≤100000,
1
≤
a
i
,
b
i
,
p
i
≤
2
∗
1
0
9
1≤a_i,b_i,p_i≤2∗10^9
1≤ai,bi,pi≤2∗109
输入样例
2
3 2 5
4 3 9
输出样例
4
1
算法 n l o g n nlog^n nlogn
将指数按二进制来算,每经过一位都要增加 b a s e base base,如果位置上为1,则乘上 a n s ans ans
#include <iostream>
using namespace std;
typedef long long LL;
LL ppow(int a, int b, int c) {
LL ans = 1, base = a;
while (b) {
if (b & 1) {
ans = (ans * base) % c;
}
base = (base * base) % c;
b >>= 1;
}
return ans;
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
printf("%d\n", ppow(a, b, c));
}
return 0;
}