题解 | #完全数计算#
完全数计算
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; } }
有时候需要过滤一些特殊情况
雪域灰灰刷题笔记 文章被收录于专栏
雪域灰灰刷题笔记