杰瑞科技汇

Java如何找出1000以内所有完数?

Java 找出1000以内的所有完数

完数是指一个数等于它的真因子(除了自身以外的约数)之和的数,6的真因子是1、2、3,而1+2+3=6,所以6是一个完数。

Java如何找出1000以内所有完数?-图1
(图片来源网络,侵删)

以下是Java代码实现:

public class PerfectNumbers {
    public static void main(String[] args) {
        System.out.println("1000以内的完数有:");
        for (int i = 2; i <= 1000; i++) {
            if (isPerfectNumber(i)) {
                System.out.print(i + " ");
            }
        }
    }
    // 判断一个数是否是完数
    public static boolean isPerfectNumber(int num) {
        if (num <= 1) {
            return false;
        }
        int sum = 1; // 1是所有大于1的数的真因子
        for (int i = 2; i <= num / 2; i++) {
            if (num % i == 0) {
                sum += i;
            }
        }
        return sum == num;
    }
}

代码说明:

  1. main方法遍历2到1000的所有整数,调用isPerfectNumber方法判断每个数是否是完数。
  2. isPerfectNumber方法:
    • 首先排除小于等于1的数(完数定义要求大于1)
    • 初始化sum为1(因为1是所有大于1的数的真因子)
    • 遍历2到num/2的所有整数,检查是否能整除num
    • 如果能整除,则将该数加到sum中
    • 最后比较sum是否等于num,如果是则返回true

输出结果:

运行上述程序将输出:

1000以内的完数有:
6 28 496 

数学背景:

在1000以内只有三个完数:6、28和496,下一个完数是8128,已经超过了1000,完数在数学中相对罕见,目前已知只有51个完数。

Java如何找出1000以内所有完数?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇