const ll mod=1e9+7;
ll n,ans,dp[MX][66];
int k;
void extgcd(ll a,ll b,ll& d,ll& x,ll& y)
{
if(!b){ d=a; x=1; y=0;}
else{ extgcd(b,a%b,d,y,x); y-=x*(a/b); }
}
ll inverse(ll a,ll n)
{
ll d,x,y;
extgcd(a,n,d,x,y);
return d==1?(x+n)%n:-1;
}
ll fun(ll key,int x)
{
memset(dp,0,sizeof(dp));
dp[0][x]=1;
rep(i,k)
{
for(int j=0;j<=x;++j)
{
ll tag=inverse(j+1,mod);
for(int k=0;k<=j;++k)
dp[i+1][k]=(dp[i+1][k]+(dp[i][j]*tag)%mod)%mod;
}
}
ll ans=0,tmp=1;
for(int i=0;i<=x;++i)
{
ans=(ans+(dp[k][i]*tmp)%mod)%mod;
tmp=(tmp*key)%mod;
}
return ans;
}
inline void solve()
{
cin>>n>>k;
ans=1;
for(ll i=2ll;i*i<=n;++i)
{
if(n%i==0)
{
int num=0;
while(n%i==0) n/=i,++num;
ans=(ans*fun(i,num))%mod;
}
}
if(n>1) ans=(ans*fun(n,1))%mod;
cout<<ans<<endl;
}
11-01
1395
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交