#include<iostream>
#include<algorithm>
using namespace std;
//首先记住一个公式a^k%q写作 (a^k1*a^k2)%q= (a^k1%q *a^k2%q)%q
int quick_mi(int a, int k, int q)//快速幂的本质就是a的k次方,然后将k拆解为二进制例如1001,k=1+8,即a的1+8次方=a✖a的八次方
//快速幂预先处理出从0开始到a的logk次方从而相乘即可
{
int res = 1;
while (k )//直到k全部的1
{
if (k & 1)
{
res = (long long)res * a % q;//本质就是相乘
}
k >>= 1;
a = (long long)a * a % q;//拆分后a的k次方
}
return res;
}
int main()
{
int n;
cin >> n;
while (n--)
{
int a, k, p;
cin >> a >> k >> p;
cout << quick_mi(a, k, p) << endl;
}
return 0;
}
快速幂算法
最新推荐文章于 2025-07-20 12:45:35 发布