题解 | #完全数计算#

完全数计算

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

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n=0;
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            n = in.nextInt();
        }

        result(n);
    }


    private static void result(int n){

        int count =0;
        for(int i=2;i<=n;i++){
            if(find(i)){
                count++;
                //System.out.println(i);
            }
        }

        System.out.print(count);
    }



    private static boolean find(int a){
        
        Set<Integer> set = new HashSet<>();
        int max = a/2 +1;
        int sum = 1;
        for(int i=2;i<max;i++){
            if(a % i == 0){
                if(set.contains(i)){
                    continue;
                }
                set.add(i);
                sum +=i;
                int next = a/i;
                if(!set.contains(next)){
                    sum = sum + next;
                    set.add(next);
                }
            }
            if(sum > a){
                return false;
            }
        }
        
        return sum == a;
    }

}

有时候需要过滤一些特殊情况

#努力刷题下#
雪域灰灰刷题笔记 文章被收录于专栏

雪域灰灰刷题笔记

全部评论

相关推荐

废物一个0offer:认真的吗二本本科找人工智能岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 12:11
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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