快速幂
原理:
- 有点倍增的思想。
- 将幂k转化为二进制数,再用位运算&1一位一位去对,来检查k上的某一位是否为1.
快速幂
模块化
#include<iostream>
#include<stdio.h>
using namespace std;
#define ll long long
int qmi(int a,int k,int p)
{
ll res=1;
while(k)
{
if(k&1)res=(ll)res*a%p;
k=k>>1;
a=(ll)a*a%p;
}
return res;
}
int main()
{
int n;
cin>>n;
while(n--)
{
ll a,k,p;
cin>>a>>k>>p;
cout<<qmi(a,k,p)<<endl;
}
return 0;
}
原晨旭
#include<iostream>
#include<stdio.h>
using namespace std;
#define ll long long
int main()
{
int n;
cin>>n;
while(n--)
{
ll a,k,p;
cin>>a>>k>>p;
ll res=1;
//将幂转化为二进制,对每一位都进行判定
while(k>0)
{
if(k&1)res=(ll)res*a%p;
k=k>>1;
a=(ll)a*a%p;
}
cout<<res<<endl;
}
return 0;
}