快速幂
#include <cstdio>
using namespace std;
typedef long long ll;
ll pow(ll a,ll b,ll p){
ll ans = 1,t = a;
while (b!=0){
if (b & 1) ans *= t;
ans %= p;
t = (t*t) % p;
b >>= 1;
}
return ans % p;
}
int main(){
ll a,b,p,ans;
scanf("%lld%lld%lld",&a,&b,&p);
printf("%lld\n",pow(a,b,p));
return 0;
}
快速乘
#include <cstdio>
using namespace std;
typedef long long ll;
ll multi(ll a,ll b,ll p){
ll ans = 0,t = 1;
while (b!=0){
if (b&1) ans += (t*a % p);
ans %= p;
t = t*2 % p;
b >>= 1;
}
return ans;
}
int main(){
ll a,b,p,ans;
scanf("%lld%lld%lld",&a,&b,&p);
a %= p;
b %= p;
printf("%lld\n",multi(a,b,p));
return 0;
}