//用公式A^B % C = A ^(B % PHI(C) + PHI(C) ) % C处理一下B,注意B是大数,所以要用大数取模的方法,然后进行常规的幂取模。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
ll A,B,C;
ll geteular(ll n)
{
ll i, res=n;
ll t= (ll)sqrt(n) + 1;
for (i = 2; i <t; i++)
if(n%i==0) {
res = res / i * (i - 1);
while (n % i == 0) n /= i;
}
if (n > 1) res = res / n * (n - 1);
return res;
}
ll f(ll a,ll b)
{
if(b==1)return a;
if(b%2==0)
{
ll t= f(a,b/2);
return (t*t)%C;
}
return (f(a,b-1)*a)%C;
}
int main()
{
char B[1000010];
while(scanf("%lld%s%lld",&A,&B,&C)!=EOF)
{
ll x=0;ll cc=geteular(C);
int len=strlen(B);
for(int i=0;i<len;i++)
{
x=x*10+(B[i]-'0');
x%=cc;
}
x+=cc;
printf("%lld\n",f(A,x));
}
return 0;
}
FZU1759 Super A^B mod C
最新推荐文章于 2019-03-03 20:57:45 发布