根据神奇的欧拉定理,可以得出的结论。
A ^ ( B ^ C ) % MOD 转化为 先求 ans = (B ^ C)% (MOD-1); Ans = (A ^ ans)% (MOD);
然后此题就完美的解决了。
耗时:3Ms。
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
using namespace std;
const int MOD1 = 1000000007;
const int MOD2 = 1000000006;
long long pow_m(long long a,long long n,long long MOD)
{
long long ret=1;
long long tmp=a%MOD;
while(n)
{
if(n&1) ret=(ret*tmp)%MOD;
tmp=(tmp*tmp)%MOD;
n>>=1;
}
return ret;
}
long long a,b,c,ans,Ans;
int main()
{
while(~scanf("%lld%lld%lld",&a,&b,&c))
{
ans=pow_m(b,c,MOD2);
Ans=pow_m(a,ans,MOD1);
printf("%lld\n",Ans);
}
return 0;
}