·题目:
快速幂:快速地求出上述的结果
//如果用朴素方法,时间太慢
·思路分析:
//说明:我们假设某个k的每个二进制位都是1,那么对应的第一项是a^1,也就是a,然后每次都是后面一个都是前面一个的平方
#include <iostream> #include <algorithm> using namespace std; typedef long long LL; //关键部分代码 int qmi(int a,int k,int p) { int res=1; while(k) { if(k&1)//如果k的二进制的这一位上是1,就要算到结果res里面 res=(LL)res*a%p; k>>=1; //k每次二进制右移一位,然后每一项对应一个a a=(LL)a*a%p;//a表示每一项a的某次方 } return res; } int main() { int n=0; scanf("%d",&n); while(n--) { int a,k,p; scanf("%d%d%d",&a,&k,&p); printf("%d\n",qmi(a,k,p)); } return 0; }