解题思路
这道题可以转化为:求将整数 n 分解为若干个无序因子的排列,但每个因子都不能是完全平方数的方案数。因为初始数值为 1,每次乘上一个合成因子 w(w≥2),所以合成的过程对应一个因子序列,因子的乘积等于 n。不同的操作顺序视为不同的序列,因此需要计算所有有序的、每个因子都不是完全平方数的因子分解方案数。
我们使用动态规划来解决:
- 定义 dp[x] 表示从 1 出发,经过一系列合法的合成操作,恰好得到数值 x 的不同操作序列总数。
- 边界条件:dp[1]=1,表示没有进行任何操作时(当前数值就是 1),算作一种方案。
- 状态转移:考虑已经得到一个数值 i 的方案,下一步可以乘上一个合成因子 w(w≥2 且 w 不是完全平方数),得到新的数值 i×w。将 dp[i] 累加到 dp[i×w] 上,即可记录所有后续序列。