题目链接
思路:初看式子挺吓人,其实对答案产生影响的只有x的素因子,统计一下x的每个素因子的个数就行。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+1;
const ll mod=1e9+7;
ll prime[maxn];
ll quick(ll a,ll b){
ll ans=1;
a=a%mod;
while(b!=0){
if(b&1) ans=(ans*a)%mod;
b>>=1;
a=(a*a)%mod;
}
return ans;
}
int main()
{
ll x,n,m=0;
scanf("%lld %lld",&x,&n);
for(ll i=2;i*i<=x;++i)
{
if(x%i==0)
{
prime[++m]=i;
while(x%i==0) x/=i;
}
}
if(x>1) prime[++m]=x;
ll ans=1;
for(int i=1;i<=m;++i)
{
ll temp=n,cnt=0;
while(temp>0)
temp/=prime[i],cnt+=temp;//算个数
ans=(ans*quick(prime[i],cnt)%mod);
}
printf("%lld\n",ans);
}