题解 | #完全数计算#

完全数计算

https://www.nowcoder.com/practice/7299c12e6abb437c87ad3e712383ff84

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();

            //第一个完全数是6,若小于6则输出0,这段代码是刻有可无得,毕竟在我们程序没有
            //运行之前,我们不得而知第一个完全数是几,这完全是我们心算的结果
            if (n < 6) {
                System.out.println(0);
                continue;
            }

            int count = getCount(n);

            //输出结果
            System.out.println(count);
        }
    }

    private static int getCount(int n) {
        int count = 0;    //计数变量
        for (int t = 6; t <= n; t++) {
            int sum = 0;
            //统计因数的和,重点是找到这个数的全部因数然后求和,计算因素的方法有一个技巧,假设该数为n,不从遍历1-n去测试变量是否为n的约数,
            //而是迭代到1到该数的平方根即可,因为一个数如果存在因数,那么他的最小因数一定是小于自身平方根的,而对应的另外一个因数
            //则肯定会大于自身平方根,所以我们只需要找出较小的那一个因素,然后用n对较小的因素取整得到另外一个因素,
            //那么计算因素的和只需要用两个因素相加并累计结果即可,但是完美数要排除自身,为了代码简单起见,我们可以从2开始找因素,找完之后用
            //累计的和直接+1即可判断是否是完美数
            for (int i = 2; i <= Math.sqrt(t); i++) {
                if (t % i == 0) {
                    sum = sum + i + t / i;
                }
            }
            if (sum + 1 == t)
                count++;
        }
        return count;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务