2X106=M2 \leq X \leq 10 ^6 = Mとおきます。11からMMの整数それぞれがいくつ約数を持つかを数えます。

任意の自然数nnの約数がmm個あることは、倍数にnnのある自然数はmm個ある、と言い換えられます。 そこで、以下の操作を行います。

  • 長さMMの配列ccを作り、cxc_xは整数xxの約数の個数を保持する。
  • 1xM1 \leq x \leq Mにおいて、cy (y=x,2x,...,rx)c_{y} \ (y = x, 2x, ..., rx )11ずつ増やす。(rrは、rxM<(r+1)xrx \leq M < (r + 1) xを満たします。)

この操作はO(MlogM)O(M \log{M})で行えます。

ccを生成した後はcxc_xの値ごとにxxを分け、ki=cxk_i = c_xを満たすxxを昇順に並べた配列を二分探索することなどにより、制限時間内にこの問題を解くことができます。