完全数,又称完数、完美数。当一个数等于其不包含本身的所有因子之和,即真因子之和时,这个数就是完数。如第一个完全数6=1+2+3。现编写一个程序,显示出在正整数N以下的所有的完全数并包含其因子。主要的思路已经标注在给出的代码中,由于只是java爱好者,在以后的编程中有待于数据结构与算法的深入学习。
import java.util.ArrayList;
import java.util.Scanner;
public class panduan {
/* 判断完全数的关键点有两个:
1、找出其不包含本身的因子
2、其不包含本身的因子的和是该数本身*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int shuru = sc.nextInt();
//输入一个数,目的是要找出该数范围之内的完数
int c = 0; //声明变量c以接受因子的和
ArrayList<Integer> shuzu = new ArrayList<>(); //建立数组以接受判定产生的因子
for (int i = 1; i < shuru; i++) {
//第一循环:检查在输入数范围之内的每一个数
for (int i1 = 1; i1 < i; i1++) {
//第二循环:判定在第一循环中推进到的数是不是完数
//循环中1和2是特例,设定i和i1都为1,其中1在循环开始就被排除,2不符合1 + 2 = 2的条件,也被排除,循环将会正常进行
if (i % i1 == 0) {
//以余数为零判断因子当该数出现因子,c加上因子,因子加入数组
c = c + i1;
shuzu.add(i1);
}
}
if (c == i) { //当因子的和为i本身时,确定该数为完数,输出完数与其因子
System.out.print(c + " its factors are");
for (int i1 = 0; i1 < shuzu.size(); i1++) {
System.out.print(" " + shuzu.get(i1));
}
System.out.println("");
}
// 每一个判定小循环结束之后,对c和数组清零,大循环继续推进到下一个数进行判定
c = 0;
shuzu.clear();
}
}
}