吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1141|回复: 10
收起左侧

[已解决] 【Java】Java初级算法基础 ,"完数"问题

[复制链接]
WooYun 发表于 2020-11-11 23:14

[Java] 纯文本查看 复制代码
/**
* 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。 例如6=1+2+3.编程 找出1000以内的所有完数。
* 
*/
public class Code7 {
        public static void main(String[] args) {
                wanShu(1000);
        }

        private static void wanShu(int num) {
                for (int i = 2; i <= num; i++) {
                        //i++一次 sum清零一次
                        int sum = 0;
                        //值判断i有几个因数
                        for (int j = 1; j < i; j++) {
                                //模除为0则是其因数
                                if (i % j == 0) {
                                        sum += j;
                                }
                        }
                        //累加和相等则为完数
                        if (sum == i) {
                                System.out.println(sum);
                        }

                }
        }

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
qeq666 + 1 谢谢@Thanks!
day1401488752 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

goblin0427 发表于 2020-11-12 00:12
正在学习Javav,来看看这个学习机会
圈圈呼啦 发表于 2020-11-12 01:01
bigdawn 发表于 2020-11-12 01:16
再见babay 发表于 2020-11-12 01:16
算法可以优化一下:一个数的因子总是成对出现的,而且这对因数总是有一个大于等于这个数的1/2,另一个小于等于它的1/2,在每次for循环中是一定能得到这两个数(一个是能够被整除的数,另一个是被整除的商)。对于一个大于2的数就可以将循环终止条件缩小一半,即减少一半的循环次数,但是要做好特殊值的处理(除数是1,或者这个数是偶数,除数是他的一半)
svxcfg 发表于 2020-11-12 07:44
/**
* 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。 例如6=1+2+3.编程 找出1000以内的所有完数。
*
*/
public class Code7 {
        public static void main(String[] args) {
                wanShu(1000);
        }

        private static void wanShu(int num) {
                for (int i = 2; i <= num; i++) {
                        //i++一次 sum清零一次
                        int sum = 0; //这个为什么用Sum呢?局部变量放在这里,代码变得很难读懂。。。。
                        //值判断i有几个因数
                        for (int j = 1; j < i; j++) {
                                //模除为0则是其因数
                                if (i % j == 0) {
                                        sum += j;
                                }
                        }
                        //累加和相等则为完数
                        if (sum == i) {
                                System.out.println(sum);
                        }

                }
        }
QingYi. 发表于 2020-11-12 08:31
svxcfg 发表于 2020-11-12 07:44
/**
* 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。 例如6=1+2+3.编程 找出1000以内的所有 ...

6的sum因子是1 2 3
前面已经加过sum了 你再加就是从6开始了,所以要初始化为0
QingYi. 发表于 2020-11-12 08:33
可以考虑优化一下O(n2)的复杂度
zhangwei1997 发表于 2020-11-12 10:25
j<(i/2)就可以了吧
 楼主| WooYun 发表于 2020-11-15 22:11
本帖最后由 WooYun 于 2020-11-15 23:26 编辑
我试了,确实少了一半时间

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 11:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表