这道题可以转化为:求将整数 n 分解为若干个无序因子的排列,但每个因子都不能是完全平方数的方案数。因为初始数值为 1,每次乘上一个合成因子 w(w≥2),所以合成的过程对应一个因子序列,因子的乘积等于 n。不同的操作顺序视为不同的序列,因此需要计算所有有序的、每个因子都不是完全平方数的因子分解方案数。
我们使用动态规划来解决:
在数字合成游戏中,你的初始数值为 1。每一次操作,你可以选择一个合成因子 w(w≥2)并将当前数值乘上 w。然而,游戏禁止使用任何整数的平方作为合成因子,即不存在整数 y 使得 w=y×y。操作顺序不同的序列被视为不同的方案。现在给定目标数值 n,请你计算从 1 合成到 n 一共有多少种不同的操作序列。整数 n 满足 1≤n≤2×105。
输入共一行,包含一个整数 n。
输出一个整数,表示满足条件的操作序列总数。
输入
1
输出
1
说明
初始数值为 1,已经等于目标 1,不需要任何操作。空操作序列也算一种方案,因此答案为 1。
输入
6
输出
2
说明
从 1 合成到 6,合法的合成因子不能是完全平方数(即不能是 1, 4, 9, ...)。
允许的因子序列有两种:
2, 3)3, 2)
因此共有 2 种操作序列,答案为 2。输入
12
输出
5
说明
目标为 12。所有合法的操作序列对应的因子序列(每个因子 ≥2 且不是完全平方数)为:
4 不是合成因子,因子均为 2, 2, 3,均非平方数,因此合法)其中 [4,3] 不合法,因为 4 是完全平方数,不能作为合成因子。所有合法有序排列共计 5 种,故答案为 5。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.