1 条题解
-
0
题解
思路
设值 在列表中出现 次。若选择某个不同的质数值 作为质因数分解中的底数,就必须消耗它的一次出现;其余恰好 个元素作为指数,并按所选的 个不同质数底数分配。
固定底数集合 后,剩余指数多重集的不同排列数为
$$\frac{n!}{\prod_x(c_x-[x\in S])!} =\frac{n!}{\prod_x c_x!}\prod_{p\in S}c_p.$$因此只需在所有出现过的不同质数值中选择 个,求权值 的第 个基本对称多项式,再乘公共因子 。
做法
子任务 1:枚举底数集合与指数排列
枚举所有大小为 的不同质数底数集合。删除各底数的一次出现后,对剩余指数多重集做全排列并去重计数。 时可以直接完成。
子任务 2:枚举质数子集
不同质数值不超过 时,深度优先枚举大小为 的质数子集,累加所选出现次数之积,再乘公共阶乘因子。
子任务 3:基本对称多项式 DP
令 表示已处理若干个不同质数值后,选择恰好 个的权值和。遇到出现次数为 的质数 时倒序转移
最终答案为
正确性证明
引理 1
任何合法的 都对应于从列表中选出 个不同质数值作为底数,并把剩余 个值作为正指数分配给这些底数。
证明:质因数分解中的底数互不相同且必须是质数。 共含 个数,所以底数和指数各有 个;反过来,任一这样的选择与分配都给出唯一的质因数分解。证毕。
引理 2
固定底数集合 时,合法指数分配数为 。
证明:选择底数后,值 的剩余次数从 变为 ,其他值不变。对剩余多重集做排列,数量为 ;利用 化简即得。证毕。
引理 3
DP 结束后,。
证明:对每个不同质数值分别选择或不选择。倒序转移中的第一项对应不选择,第二项对应选择并乘权值 ,故按归纳得到所有大小为 的集合且各计一次。证毕。
定理
算法输出满足 等于给定多重集的正整数个数。
证明:由引理 1,所有合法整数按底数集合唯一分类;引理 2 给出每类的指数分配数;引理 3 对所有底数集合的权值求和。乘公共阶乘因子后恰为全部合法整数数目。证毕。
复杂度
设不同质数值个数为 ,最大输入值为 。筛法为 ,DP 为 ,空间复杂度为 。
- 1
信息
- ID
- 1170
- 时间
- 5000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者