完全数,又称完数、完美数。当一个数等于其不包含本身的所有因子之和,即真因子之和时,这个数就是完数。如第一个完全数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();
}
}
}
本文介绍了一个简单的Java程序,用于在用户输入的正整数范围内找出所有的完全数,并打印出它们的因子。完全数是指一个数等于其所有真因子(不包括自身)之和。程序通过两层循环实现,外层循环遍历指定范围内的每个数,内层循环判断当前数是否为完全数。当找到完全数时,程序会输出该数及其因子列表。这有助于初学者理解完全数概念和基础编程技巧。
5325

被折叠的 条评论
为什么被折叠?



