Joeの精進記録

旧:競プロ練習記録

D - Factorization

D - Factorization

長さ nの正整数の配列で、各要素の積が正整数 mとなるようなものが何通りなるか、という問題。

解法

 m素因数分解を考え、 m = p_1^{a_1}\ldots p_k^{a_k}とします。今の問題は次のように言い換えることができます。

 n個の箱があり、 a_i個の p_iを重複を許して入れます。 それぞれの p_i \ (1 \le i \le k)についてこの作業をする場合の、入れ方の場合の数はいくらか。

この言い換えが問題の本質です。たとえば n = 3, m = 8としたときに[1,1,8]も[1,2,4]も[2,2,2]も全部今の方法でもれなく数え上げられていることを確認してみてください。

このときの場合の数は、 iについて独立に考えることができます。そこで以下の問題を考えます。

 n個の箱があり、 a個の pを重複を許して入れる場合の数はいくらか。

これは重複組合せの計算であり、 dp[i][j] = i番目までのアイテムから j個重複を許して入れる場合の数、とした動的計画法を考えることで解けます。