Bootstrap

JAVA 编程:完全数的判断

完全数,又称完数、完美数。当一个数等于其不包含本身的所有因子之和,即真因子之和时,这个数就是完数。如第一个完全数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();

        }

    }

}

;