Date:2022.03.29
题意描述:
如果一个数 x 的约数之和 y(不包括他本身)比他本身小,那么 x 可以变成 y,y 也可以变成 x。
例如,4 可以变为 3,1 可以变为 7。
限定所有数字变换在不超过 n 的正整数范围内进行,求不断进行数字变换且不出现重复数字的最多变换步数。
输入格式
输入一个正整数 n。
输出格式
输出不断进行数字变换且不出现重复数字的最多变换步数。
数据范围
1≤n≤50000
输入样例:
7
输出样例:
3
样例解释
一种方案为:4→3→1→7。
思路:总体思路同树的最长路径,我们注意到如果一个数约数和<这个数,则可在这两个数间连一条无向边。由此,最终我们能得到一个森林(注意不一定只有一棵树!!!),因此答案即找森林中每棵树的最长路径再取个最大值,边权都为1。
关于求一个数的约数和,当然可以试除法筛, O ( N N ) O(N\sqrt{N}) O(NN)能过。但我们可以逆向思维,这样如果 N N N更大更容易拓展,我们要求一个数的约数和,那我们不妨求每个数的倍数,每次让这个数的倍数加上这个数,最终每个数都会得到它的约数和。
此外,特别注意 1