CF2060F. Multiplicative Arrays
题意
给定 \(n, k\), 求有多少个数组 \(a\), 使得 \(\displaystyle 1 \le |a| \le n, 1 \le a_i \le k, \prod_{i = 1}^{|a|} = x\), 其中 \(x \in [1, k]\).
算法
动态规划, 组合数学.
思路
注意到虽然 \(n\) 很大, 但 \(k \le 10^5\), 这意味着 \(k\) 的质因子个数不多于 \(\log_2 k\) 个, 也就是 \(17\) 个, 剩下的空肯定都是会填 \(1\) 的.
考虑计数. 令 \(f_{i, j}\) 表示当前序列乘积为 \(i\) 且长度为 \(j\) (其中每一个数均大于 \(1\)) 的方案数. 显然有转移方程 \(\displaystyle f_{i, j} = \sum_{p \mid i \and p > 1} f_{i / p, j - 1}\).
这样计算出 \(f\) 数组过后, 思考怎么计算答案. 再令 \(g_n\) 表示乘积为 \(n\) 的满足条件的数组个数, 那么有 \(\displaystyle g_n = \sum_{i = 1}^n \sum_{j = 1}^{16} \binom{i}{j} f_{n, j}\), 注意到 \(\displaystyle \sum_{i = 1}^n \binom{i}{j} = \binom{n + 1}{j + 1}\), 所以 \(\displaystyle g_n = \sum_{j = 1}^{16} \binom{n + 1}{j + 1} f_{n, j}\).

浙公网安备 33010602011771号