《关于求约数的算法》

来源:百度知道 编辑:UC知道 时间:2024/05/09 01:28:25
如果一个数x的约数和(不包括它本身,下同)比它本身小,那么x可以变成它的约数和;如果对于某个y>x且y的约数和为x,那么x也可以变成y。例如,4可以变为3,1可以变为7。限定所有的数字变换在不超过n的正整数范围内进行,求不断进行数字变换且没有重复数字出现的最多变换步数。

样例说明
4→3→1→7。
-----------------------------------------------------------

麻烦各位写出算法,或者给出C语言源程序。多谢了 。

4->3 (1+2)
3->1 (1)
1->7 (7>1且约数只有1所以)

化成一个图的问题.

从1到n的数字是这个图的顶点集.
根据题意,当x可以变成y时,y也可以变成x,所以每一组这样的x,y,可以用一条无向边连接这两个顶点.
最后,当整个图构造完成以后,找出图中的最长路径就可以了.
这些算法在数据结构教材都可以找到,就不多说了.

下面是算法的大概步骤:(用邻接表存储)
首先建立顶点集,值为1,2,...,n.
然后从1到n循环,对每个数x求出其因子总和y,建立从x到y的边及y到x的边.
最后(用深度优先遍历?)求出最长路径的长度.

OVER.
至于代码...就略了吧....

你没说清1是怎么变成7的,或者7是怎么来的

说清楚就能做了