用递归程序求解随机产生一个正整数n(n>=100000),确定n是否是它所有因子之和(完数)
了解什么是因子:因子就是所有可以整除这个数的数,不包括这个数自身,例如:6的因子为1,2,3。
完数:即某正整数的所有因子之和等于该数,即为完数。例:6的因子为1,2,3且6=1+2+3;即称6为完数。
进行分析,要求利用递归实现,递归是一种直接或间接引用自身的定义方法。一个合法的递归定义包括两部分:基础情况和递归部分。基础情况以直接形式明确列举新事物的若干简单对象,递归部分给出有简单(或较简单)对象定义新对象的条件和方法。
本题要求编写一个算法实现该功能,算法讲究性能,即时间复杂度和空间复杂度,一个好的算法不仅能够准确运行,而且他的时间复杂度很低。算法具有五个特性:a,有0个或者多个输入;b,至少有1个或者多个输出;c,算法具有确定性;d,算法的指令有限;e,算法具有可行性。
- 对于该问题,首先先求一个整数的所有因子,在程序中即对该数依次进行求模运算,结果为0则代表是因子。
/**
* 求一个正整数的所有因子之和等于该数
* @author zclong
*
*/
public class test {
public static void main(String[] args) {
//产生随机数
int value = (int) (Math.random()*1000000);
//计算因子之和
int sum = 0;
//定义一个list数组存储因子
List<Integer> list = new ArrayList();
//对随机数进行遍历
long startTime = System.currentTimeMillis();
for (int j = 1; j <= value-1; j++) {
if(value % j == 0) {
list.add(j);
sum = sum + j;
}
}
long endTime = System.currentTimeMillis();
if(sum == value) {
System.out.println("因子个数" + list.size() + &