#include #include #include #include using namespace std; using mint = atcoder::modint998244353; map pf(int n){ map res; for (int p = 2; p*p <= n; p++){ while (n%p == 0){ res[p]++; n /= p; } } if (n > 1) res[n]++; return res; } int main(){ int N, _K; cin >> N >> _K; auto K = pf(_K); vector L; for (auto [k, v] : K) L.push_back(v); map, mint> dp, ep; dp[vector(L.size(), 0)] = 1; for (int _ = 0; _ < N; _++){ int __x; cin >> __x; auto _x = pf(__x); vector x; for (auto [k, v] : K) x.push_back(_x[k]); for (auto [k, v] : dp){ ep[k] += v; auto nk = k; for (int i = 0; i < k.size(); i++){ nk[i] = min(nk[i]+x[i], L[i]); } ep[nk] += v; } dp.swap(ep); ep.clear(); } cout << dp[L].val() << endl; }