不難,用Divide and Conquer去切
#include <stdio.h>
long long b, m, mod;
int expo(long long ex)
{
int rs;
if (ex == 1)
return mod;
if (ex == 0)
return 1;
rs = expo(ex/2)%m;
if (ex%2)
return (rs*rs*mod)%m;
else
return (rs*rs)%m;
}
int main(void)
{
long long p;
while (scanf("%lld%lld%lld", &b, &p, &m) == 3)
{
mod = b%m;
printf("%d\n", expo(p));
}
return 0;
}
沒有留言:
張貼留言