M - I hate prime numbers 解説 /

実行時間制限: 8 sec / メモリ制限: 1024 MiB

配点 : 100 点

問題文

素数が嫌いな soryuusi 君は、以下の問題を考えました。

正整数 N, M が与えられます。 長さ N の正整数列 A = (A_1, A_2, \dots, A_N) および B = (B_1, B_2, \dots, B_N) の組 (A, B) であって、以下の条件を全て満たすものを良い数列の組と呼びます。

  • 1 \leq i \leq N を満たす全ての整数 i について、1 \leq A_i \leq N である。
  • 1 \leq i \leq N を満たす全ての整数 i について、B_i \leq B_{A_i} である。
  • 任意の整数の組 (a, b) に対して、(A_i, B_i) = (a, b) となる整数 i \ (1 \leq i \leq N) の個数は素数ではない。

各 m = 1, 2, \ldots, M について、良い数列の組 (A, B) のうち、B の要素の最大値が m であるものの個数を 998244353 で割った余りを求めてください。

制約

  • 1 \leq N \leq 5 \times 10^4
  • 1 \leq M \leq 10^5
  • 入力される数値はすべて整数

入力

入力は以下の形式で標準入力から与えられる。

N M

出力

各 m = 1, 2, \ldots, M に対する答えを以下の形式で出力せよ。

\mathrm{ans}_1 \mathrm{ans}_2 \dots \mathrm{ans}_M

入力例 1

2 3

出力例 1

2 6 10

良い数列の組 (A, B) であって B の要素の最大値が 1 となるものは、以下の 2 個です。

  • A = (1, 2), \ B = (1, 1)
  • A = (2, 1), \ B = (1, 1)

良い数列の組 (A, B) であって B の要素の最大値が 2 となるものは、以下の 6 個です。

  • A = (1, 1), \ B = (2, 1)
  • A = (1, 2), \ B = (1, 2)
  • A = (1, 2), \ B = (2, 1)
  • A = (1, 2), \ B = (2, 2)
  • A = (2, 1), \ B = (2, 2)
  • A = (2, 2), \ B = (1, 2)

入力例 2

4 7

出力例 2

28 364 1564 4204 8860 16108 26524

入力例 3

45678 20

出力例 3

248811653 85639511 671022534 843777830 675759401 391167891 441451903 87856014 338042725 28094536 210395302 17022370 640181970 394634579 762270579 851302246 856080401 178830339 318103782 1067086