解法:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a,b,p;
cin>>a>>b>>p;
long long res=1,t=a;
while(b)
{
if(b&1)
{
res = (res%p) * (t%p) %p;
}
t = t*t%p;
b=b/2;
}
res = res %p;
cout<<res;
}
这题重要的是将b给按二进制拆分,然后将幂的结果转化为多个分量相乘
类似还有一题
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a,b,p;
cin>>a>>b>>p;
long long res = 0, t = a;
while(b)
{
if(b&1)
{
res = (res + t) % p ;
}
t = t*2 % p ;
b=b/2;
}
res = res % p ;
cout<<res;
}
解题方法类似,也是将b看成二进制进行分解