题目 给定 $n$ 组 $a_i,b_i,p_i$,对于每组数据,求出 ${a_i}^{b_i}mod{p_i}$ 的值。 输入格式第一行包含整数 $n$。 接下来 $n$ 行,每行包含三个整数 $a_i,b_i,p_i$。 输出格式对于每组数据,输出一
题目
给定 $n$ 组 $a_i,b_i,p_i$,对于每组数据,求出 ${a_i}^{b_i}mod{p_i}$ 的值。
输入格式 第一行包含整数 $n$。
接下来 $n$ 行,每行包含三个整数 $a_i,b_i,p_i$。
输出格式 对于每组数据,输出一个结果,表示 ${a_i}^{b_i}mod{p_i}$ 的值。
每个结果占一行。
数据范围 $1≤n≤100000,1≤a_i,b_i,p_i≤2×10^9$ 输入样例:
2
3 2 5
4 3 9
输出样例:
4
1
思路
主要思路是将 $b$ 转换成二进制,将二进制中位为 $1$ 的初始化,最终结果由预处理的数值拼凑而成。
代码
#include <iostream>
using namespace std;
typedef long long LL;
// 快速幂代码
int fast_power(int a, int b, int p)
{
LL res = 1;
while (b)
{
if (b & 1) res = res * a % p;
b >>= 1;
a = (LL)a * a % p;
}
return res;
}
int main()
{
int n;
scanf("%d", &n);
while (n -- )
{
int a, b, p;
scanf("%d%d%d", &a, &b, &p);
printf("%lld\n", fast_power(a, b, p));
}
return 0;
}