一个数恰好等于它的因子之和, 这个数就称为”完数”. 例如 6 = 1+2+3。编程找出1000 以内的所有完数。

一个数如果恰好等于它的因子之和, 这个数就称为”完数”. 例如 6 = 1+2+3。编程找出1000 以内的所有完数。

Java代码实现:

import java.util.LinkedList;

public class Test {
    public static void main(String[] args) {
        for (int i = 2; i <= 1000; i++) {       // 这里从2开始,1 为本身,排除掉。
            if (num_wan(i)) {
                System.out.println(i);
            }
        }
    }

    private static boolean num_wan(int num) {
        int sum = 0;                                    //sum 用来计算因子的和
        LinkedList<Integer> list = new LinkedList<>();  //用来装所有的因子,
        for (int i = 2; i < num / 2; i++) {             // 判断因子是否重复,重复就不装了,比如3和2 2和3。
            if (!list.contains(i)) {
                if (num % i == 0) {
                    list.add(i);
                    list.add(num / i);
                    sum = sum + i + (num / i);
                }
            }
        }
        if (sum+1 == num) {                             //和的结果 加1 ,1是所有数的因子
            return true;
        }else {
            return false;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/Leo_01169/article/details/86350228