D题分水岭、
积性函数什么的,不太懂啊、
#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e5+7,mod = 1e9+7;
ll Pow(ll a,int b,ll ans = 1){
a %= mod;
for(;b;b>>=1,a = (a*a)%mod)
if(b&1)
ans = (ans*a)%mod;
return ans;
}
ll n,k,inv[70],ans = 1,dp[70],sum[70];
ll solve(ll p,int r){
dp[0] = sum[0] = 1;
for(int i=1;i<=r;i++){
dp[i] = Pow(p,i),
sum[i] = (sum[i-1]+dp[i])%mod;
}
for(int j=1;j<=k;j++){
for(int i=1;i<=r;i++){
dp[i] = (sum[i]*inv[i+1])%mod;
sum[i] = sum[i-1]+dp[i]-(sum[i-1]+dp[i] >= mod ? mod:0);
}
}
return dp[r];
}
int main(){
ios;
for(int i=1;i<=64;i++)
inv[i] = Pow(i*1ll,mod-2);
cin>>n>>k;
if(n == 1)
return 0*puts("1");
for(ll i=2;i*i<=n;i++){
if(n%i)continue;
int cnt = 0;
while(n%i==0)cnt++,n/=i;
ans = ans*solve(i,cnt)%mod;
}
if(n!=1)
ans = ans*solve(n,1)%mod;
cout<<ans<<endl;
return 0;
}