快速幂
11 =(1011)2 = 2^31+2^20+2^11+2^01
a^11 = a^(2^3)a^(2^1)a^(2^0)
= aaaaaaaa * aa * a;
a与b的乘积除以c的余数,等于a,b分别除以c的余数之积(或这个积除以c的余数)
所以可以边解快速幂边算余数,不影响结果
#include<iostream>
using namespace std;
int main()
{
int a,b,p;
scanf("%d %d %d",&a,&b,&p);
int res = 1%p;
while(b)
{
if(b&1) res = res%p*1ll*a%p;
a=a*1ll*a%p;
b>>=1;
}
printf("%d\n",res);
return 0;
}