// O(N^2) time, 60sec with N=200000 #include #include using namespace std; using mint = atcoder::modint998244353; vector enumerate_powers(int n, int k) { vector powers(n + 1); vector primes; vector is_prime(n + 1, true); powers[1] = 1; for (int i = 2; i <= n; i++){ if (is_prime[i]){ primes.emplace_back(i); powers[i] = mint(i).pow(k); } for (int p : primes){ if (i * p > n) break; is_prime[i * p] = false; powers[i * p] = powers[i] * powers[p]; if (i % p == 0) break; } } return powers; } int main(){ int n, k; cin >> n >> k; vector inv(n); inv[0] = 1; for (int i = 1; i < n; i++){ inv[i] = inv[i-1] * i; } mint fact = inv[n-1]; mint ifact = fact.inv(); for (int i = n-1; i >= 1; i--){ inv[i] = ifact * inv[i-1]; ifact *= i; } vector ps = enumerate_powers(n, k); vector g(n); auto proc = [&](int i){ i--; mint c = inv[i] * 2; for (int j = n-1; j >= 1; j--){ g[j] = g[j] * c + g[j-1]; } g[0] *= c; int lim = n - i; for (int j = 0; j < lim; j++){ g[j + i] += ps[j + 1]; } }; vector say(n); for (int a = 2; a <= n; a++){ proc(a-1); mint ans = g[a-2]; ans *= fact; ans *= inv[a-1]; say[a-1] = ans.val(); } for (int i = 0; i < n; i++){ cout << say[i] << '\n'; } }