func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long MOD = 1e9 + 7;   const int MMAX = 1e4 + 7;   const int MAXDEG = 55;   long long v[MAXDEG][MMAX];   vector<long long int> revs = {0};   void rev_begin() {     vector<long long int> y;     long long t = MOD - 2;     while (t > 0) {       y.push_back(t % 2);       t /= 2;     }     for (int i = 1; i < MAXDEG; i++) {       vector<long long int> a;       long long s = i;       for (int j = 0; j < 100; j++) {         a.push_back(s % MOD);         s = s * s;         s %= MOD;       }       long long ansy = 1;       for (int j = 0; j < y.size(); j++) {         if (y[j] == 1) {           ansy *= a[j];           ansy %= MOD;         }       }       revs.push_back(ansy);     }   }   void clr() {     for (int i = 0; i < MMAX; i++)       for (int j = 0; j < MAXDEG; j++) v[j][i] = 0;   }   void show() {     for (int i = 0; i < 10; i++) {       for (int j = 0; j < 5; j++) {         cout << v[i][j] <<    ;       }       cout << endl;     }   }   void doit(long long int u, int alpha) {     clr();     long long p = 1;     for (int j = 0; j < alpha + 1; j++) {       v[j][0] = p % MOD;       p *= u;       p %= MOD;     }     for (int i = 1; i < MMAX; i++) {       for (int j = 0; j < alpha + 1; j++) {         for (int l = 0; l <= j; l++) {           v[j][i] += (v[l][i - 1] * revs[j + 1]) % MOD;           v[j][i] %= MOD;         }       }     }   }   int main() {     long long n, k;     rev_begin();     cin >> n >> k;     long long ans = 1;     long long t = 2;     while (t * t <= n) {       while (t * t <= n && n % t != 0) t++;       if (n % t == 0) {         int alpha = 0;         while (n % t == 0) {           alpha++;           n /= t;         }         doit(t, alpha);         ans *= v[alpha][k];         ans %= MOD;       }     }     if (n > 1) {       t = n;       doit(t, 1);       ans *= v[1][k];       ans %= MOD;     }     cout << ans;     return 0;   }   