func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 1000006;   const long long mod = 1000000000 + 7;   long long x, y;   long long fact[MAXN + 25], inv_fact[MAXN + 25];   long long fast_pow(long long base, long long exp) {     if (exp == 0) return 1;     if (exp == 1) return base;     long long ret = fast_pow(base, exp / 2) % mod;     ret = (ret * ret) % mod;     if (exp % 2 == 1) ret = (ret * base) % mod;     return ret % mod;   }   void init() {     fact[0] = 1;     for (long long i = 1; i < MAXN + 25; i++) fact[i] = (i * fact[i - 1]) % mod;     inv_fact[0] = 1;     for (long long i = 1; i < MAXN + 25; i++)       inv_fact[i] = (inv_fact[i - 1] * fast_pow(i, mod - 2)) % mod;   }   int main() {     init();     int q;     scanf( %d , &q);     while (q--) {       scanf( %lld %lld , &x, &y);       long long ans = fast_pow(2, y - 1) % mod;       long long X = x;       for (int d = 2; d * d <= X; d++) {         if (X % d) continue;         long long m = 0;         while (x % d == 0) {           x /= d, m++;         }         long long aux = (fact[m + y - 1] * inv_fact[m]) % mod;         aux = (aux * inv_fact[y - 1]) % mod;         ans = (ans * aux) % mod;       }       if (x > 1) {         long long m = 1;         long long aux = (fact[m + y - 1] * inv_fact[m]) % mod;         aux = (aux * inv_fact[y - 1]) % mod;         ans = (ans * aux) % mod;       }       printf( %lld n , (ans + mod) % mod);     }   }   