func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long mod = 1000000007;   const int N = 1000040;   long long fact[N], invf[N];   vector<long long> primes;   long long add(long long x, long long y) { return (x + y) % mod; }   long long mul(long long x, long long y) { return (x % mod) * (y % mod) % mod; }   long long powll(long long x, long long y) {     long long res = 1LL;     while (y) {       if (y & 1LL) res *= x;       res %= mod;       x = (x * x) % mod;       y >>= 1LL;     }     return res;   }   long long divll(long long x, long long y) {     return (x * powll(y, mod - 2)) % mod;   }   long long nPr(long long n, long long r) {     if (n < r || r < 0) return 0;     return mul(fact[n], invf[n - r]);   }   long long nCr(long long n, long long r) {     if (n < r || r < 0) return 0;     return mul(mul(fact[n], invf[r]), invf[n - r]);   }   long long solve() {     long long x, y;     scanf( %lld %lld , &x, &y);     vector<long long> c;     for (long long p : primes) {       int k = 0;       while (x % p == 0) {         k++;         x /= p;       }       if (k) c.push_back(k);     }     if (x > 1) c.push_back(1);     long long ret = powll(2, y - 1);     for (long long a : c) {       ret = (ret * nCr(y + a - 1, a)) % mod;     }     return ret;   }   int main() {     int q;     cin >> q;     fact[0] = invf[0] = 1;     for (int i = 1; i <= N - 1; ++i) {       fact[i] = (fact[i - 1] * i) % mod;       invf[i] = divll(invf[i - 1], i);     }     long long lim = 1000;     vector<int> check(lim, 1);     for (int i = 2; i <= lim - 1; ++i) {       if (!check[i]) continue;       primes.push_back(i);       for (int j = 2 * i; j < lim; j += i) check[j] = 0;     }     while (q--) {       printf( %lld n , solve());     }     return 0;   }   