【题目来源】
https://www.acwing.com/problem/content/877/
【题目描述】
给定 组 ,对于每组数据,求出 的值。
【输入格式】
第一行包含整数 。
接下来 行,每行包含三个整数 。
【输出格式】
对于每组数据,输出一个结果,表示 的值。
每个结果占一行。
【数据范围】
【输入样例】
2
3 2 5
4 3 9
【输出样例】
4
1
【算法分析】
● 快速幂,又称二进制取幂,是一个以 的时间复杂度计算 的小技巧,而暴力的计算需要 的时间复杂度。
● 快速幂的原理?
答:快速幂的原理为“将求幂的任务按照指数 的二进制表示分割成更小的任务”。例如:
因为 有 个二进制位,因此当知道了 后,我们只需计算 次乘法就可以计算出 。
● 本例输入 Markdown 公式时,“\\”表示换行,“\,”表示空格。
【算法代码】
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int fastPow(LL a,LL b,LL p) {
LL ans=1;
while(b) {
if(b & 1) ans=ans*a%p;
a=a*a%p;
b>>=1;
}
return ans;
}
int main() {
int a,b,p;
int T;
cin>>T;
while(T--) {
cin>>a>>b>>p;
cout<<fastPow(a,b,p)<<endl;
}
return 0;
}
/*
in:
2
3 2 5
4 3 9
out:
4
1
*/
【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/143135845
https://www.acwing.com/problem/content/solution/877/1/