#sXDPybttg050203. 1577:【例 3】数字转换
1577:【例 3】数字转换
好的,我将这道题整理为清晰的题面格式,并补充样例解释、数据范围与时空限制:
题目描述
如果一个数 的约数和 (不包括 本身)比 本身小,那么 可以变成 , 也可以变成 。例如 可以变为 , 可以变为 。
限定所有数字变换在不超过 的正整数范围内进行,求不断进行数字变换且不出现重复数字的最多变换步数。
输入格式
输入一个正整数 。
输出格式
输出不断进行数字变换且不出现重复数字的最多变换步数。
样例
样例输入
7
样例输出
3
样例解释
,在 中,满足“约数和(不包括本身)比本身小”的数对有:
- 4 的约数和(不包括本身)为 ,3<4,所以 4 ↔ 3
- 6 的约数和为 ,6=6,不满足“小于”,所以无变换
- 其他检查:
1 的约数和(不包括本身)为 0,0<1,所以 1 ↔ 0,但 0 不在范围内,所以 1 不能变为其他数?实际上 1 的约数和为 0,但 0 不在正整数范围内,所以 1 不能变为别的数,但别的数可以变为 1(如果约数和是 1)。
3 的约数和为 1,1<3,所以 3 ↔ 1
7 的约数和为 1,1<7,所以 7 ↔ 1
因此关系图(无向边):
- 4 ↔ 3
- 3 ↔ 1
- 7 ↔ 1
形成图:1--3--4 和 1--7。
要求找最长不重复数字的路径(即图中的最长链)。
最长链是 4 → 3 → 1 → 7,长度为 3(步数 = 边数 = 链长 - 1,所以输出 3)。
数据范围
对于 的数据,。
时空限制
- 时间:
- 内存:
提示
本题可以转化为 树的最长链(直径) 问题。
对于每个 ,如果 且 ,则在 和 之间连一条无向边。
注意 可能大于 吗?不会,因为 ,所以 。
这样构造的图是一个森林(可能有多个连通块),因为每个 最多只有一个 满足 且 是 的约数和,所以每个节点最多只有一个“父节点”(即 ),整个图是无向无环图(多棵树)。
问题转化为:在森林中找最长路径(直径)。
方法:对每个连通块(树),用两次 DFS 或 BFS 求树的直径(最长链)。
- 第一次从任意节点出发,找到最远点 ;
- 第二次从 出发,找到最远点 , 到 的距离就是该树的直径。
取所有连通块的直径的最大值作为答案。
复杂度:。
注意:要预处理 每个数的约数和,可以用类似筛法 完成。