#include using i64 = long long; using u64 = unsigned long long; using u32 = unsigned; using u128 = unsigned __int128; using i128 = __int128; constexpr int mod = 998244353; std::vector inv, facInv, fac; void facInit(int N) { inv = facInv = fac = std::vector (N + 1, 1); for(int i = 2; i <= N; i ++) { fac[i] = fac[i - 1] * i % mod; inv[i] = mod - inv[mod % i] * (mod / i) % mod; facInv[i] = facInv[i - 1] * inv[i] % mod; } } i64 nCr(int n, int r) { if(n < r || r < 0) return 0; if(n >= (int)fac.size()) facInit(n); return (fac[n] * facInv[r] % mod) * facInv[n - r] % mod; } void solve() { int Q; std::cin >> Q; i64 ans = 0; int Z = 0; while(Q --) { int A, B; std::cin >> A >> B; for(int i = 2; i * i <= A; i ++) { while(A % i == 0) { Z ++; A /= i; } } if(A > 1) Z ++; std::cout << nCr(Z - 1, B - 1) << "\n"; } } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int T = 1; //std::cin >> T; while (T--) { solve(); } return 0; }