存档。
递归
#include<cstdio>
#include<iostream>
using namespace std;
long long n,m,p;
long long dfs(long long m)
{
if(m==1)return n;
if(m==2)return n%p*n%p;
if(m==0)return 1;
if(m%2==0)
{
long long g=dfs(m/2);
return (g%p)*(g%p)%p;
}
if(m%2==1)
{
long long g=dfs(m/2);
return (g%p)*(g%p)%p*n%p;
}
}
int main()
{
cin>>n>>m>>p;
cout<<dfs(m)%p;
}
非递归
#include<cstdio>
#include<iostream>
using namespace std;
int a,n,m;
int main()
{
scanf("%d%d%d",&a,&n,&m);
long long re=1ll;
int t=a;
while(n)
{
if(n&1)re=1ll*re*t%m;
t=1ll*t*t%m;
n>>=1;
}
printf("%d",re%m);
return 0;
}