B的长度是1e6,所以需要欧拉降幂,利用 A^B %C ==A^( B%phi(C)+phi(C) ) %C
不加输入挂会T,加上直接93ms。。。
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
template <class T>
inline bool _cin(T &ret)
{
char ch;
if(ch = getchar(), ch == EOF) return 0;
while(ch < '0' || ch > '9') ch = getchar();
for(ret = 0; ch >= '0' && ch <= '9'; ch = getchar())
ret = ret * 10 + ch - '0';
return 1;
}
template <class T>
void _cout(T ret)
{
if(ret < 0)
{
putchar('-');
ret = -ret;
}
if(ret > 9) _cout(ret/10);
putchar(ret%10 + '0');
}
ll eular(ll n)
{
ll ans=n;
for(ll i=2;i*i<=n;i++)
if(n%i==0)
{
ans-=ans/i;
while(n%i==0)
n/=i;
}
if(n>1) ans-=ans/n;
return ans;
}
ll qmod(ll x,ll p,ll mod)
{
ll ans=1;
while(p)
{
if(p&1) ans=ans*x%mod;
p/=2;
x=x*x%mod;
}
return ans;
}
char s[1000005];
int main()
{
ll a,b,c;
while(_cin(a))
{
scanf("%s",s);
_cin(c);
ll tmp=eular(c);
int n=strlen(s);
b=0;
for(int i=0;i<n;i++)
b=(b*10+s[i]-'0')%tmp;//降幂
_cout(qmod(a,b,c));puts("");
}
return 0;
}