什么是快速幂?
快速幂:快速求a^b % p的值,时间复杂度:O(logb)
一、暴力写法--- 循环b次求出a^b mod p (时间复杂度:O(b))
int a,b,p; cin>>a>>b>>p;
long long res=1;
while(b--)res = res * a %p;
cout<<res<<endl;
二、快速幂(时间复杂度:O(logb))
#include<iostream>
using namespace std;
typedef long long LL;
LL qmi(LL a, LL b, LL p)
{
LL ans = 1 % p; //这里%p是为了防止在b==0,p==1的情况出错
for(;b;b>>=1)
{
if (b & 1) ans = ans * a % p; //使用b的二进制的最后一位
a = a * a % p; //计算下次要用的a
}
return ans;
}
int main()
{
int n; cin>>n;
while(n--)
{
int a,b,p; cin>>a>>b>>p;
printf("%d\n",qmi(a,b,p));
}
return 0;
}