编程找出1000以内的所有完数

本文介绍了一种寻找1000以内完数的方法,通过两种不同的算法实现,第一种使用int数组和两层for循环,第二种优化了循环次数并使用字符串记录结果,详细展示了代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

2.一共两种方法

1)

//int数组+两层for循环. 空间复杂度与时间复杂度都是最高
    private static void method1(){
        //数组记录完数
        int[] p = new int[1000];

        //记录完数个数
        int n=-1;

        //记录因子之和
        int sum;

        //循环,求因子
        //因子:能够被该数整除
        for (int i = 1; i < 1000; i++) {
            sum = 0;

            for (int j = 1; j < i; j++) {
                if (i%j == 0){
                    sum += j;
                }
            }

            if (sum == i){
                n++;
                p[n] = i;
            }
        }

        System.out.println("p=" + Arrays.toString(p));
    }
2)
//方法二:优化循环次数减少 + 内存空间用多少申明多少
    private static void method2(){
        //字符串记录完数
        String p_String = "";
        //int[] p = new int[1000];

        //记录完数个数
        int n=-1;

        //记录因子之和
        int sum;

        //循环,求因子
        //因子:能够被该数整除
        for (int i = 1; i < 1000; i++) {
            sum = 0;

            for (int j = 1; j < i/2+1; j++) {
                if (i%j == 0){
                    sum += j;
                }
            }

            if (sum == i){
                n++;
                p_String = p_String + i +",";
            }
        }

        String[] p = p_String.split(",");

        System.out.println("p=" + Arrays.toString(p));
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值