#include #include using namespace atcoder; #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; using ll = long long; using mint = modint998244353; int main() { cin.tie(nullptr) -> sync_with_stdio(false); int n, m; cin >> n >> m; vector v(n); rep(i, n) cin >> v[i]; unordered_map cnt; rep(i, n) cnt[v[i]]++; vector s(m+1); for (auto& [x, c] : cnt) { mint p = x; for (int i = 1; i <= m; ++i) { s[i] += p*c; p *= x; } } vector mu(m+1, 1), isp(m+1, 1); vector ps; mu[0] = 1; mu[1] = 1; for (int i = 2; i <= m; ++i) { if (isp[i]) { ps.push_back(i); mu[i] = -1; } for (int p : ps) { ll j = p*i; if (j > m) break; isp[j] = 0; if (i%p == 0) { mu[j] = 0; break; } else mu[j] = -mu[i]; } } vector> ds(m+1); for (int i = 1; i <= m; ++i) { for (int j = i; j <= m; j += i) { ds[j].push_back(i); } } vector ans(m+1); for (int i = 1; i <= m; ++i) { mint now; for (int d : ds[i]) { int k = i/d; if (mu[k] == 0) continue; if (s[k] == 0) continue; mint t = s[k].pow(d); if (mu[k] == 1) now += t; else now -= t; } ans[i] = now; } for (int i = 1; i <= m; ++i) cout << ans[i].val() << " \n"[i == m]; return 0; }