完美数
一个数不含自身的因数的和为这个数——完美数
例如:6 = 1 + 2 + 3
代码
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
public class PerfectNum {
@SuppressWarnings("resource")
public static void main(String[] args) {
//获取因数
Scanner sc = new Scanner(System.in);
System.out.println("input ranger integer:");
int n = sc.nextInt();
long st = System.currentTimeMillis();
System.out.println("start...\n");
Map<Integer,List<Integer>> map = getFactor(n);
Map<Integer,List<Integer>> res = getPerfectNum(map);
System.out.println("range "+n+" have total : " +res.size()+" perfect numbers.");
System.out.println(res);
System.out.println("\nend...");
System.out.println("cost time : " + (System.currentTimeMillis() - st) + " ms.");
}
/*
* 依次判断Map中的数是否为完美数
*/
private static Map<Integer, List<Integer>> getPerfectNum(Map<Integer,List<Integer>> map) {
Set<Entry<Integer,List<Integer>>> entries = map.entrySet();
Map<Integer,List<Integer>> res = new HashMap<Integer,List<Integer>>();
for(Entry<Integer,List<Integer>> e:entries) {
List<Integer> nums = e.getValue();
int sum = 0;
for(int i=0;i<nums.size()-1;i++) {
sum += nums.get(i);
}
if(sum == e.getKey()) {
res.put(sum, nums);
}
}
return res;
}
/*
* 获取因数并封装到Map中
*/
public static Map<Integer,List<Integer>> getFactor(int n) {
Map<Integer,List<Integer>> map = new HashMap<>();
for(int i=6;i<n;i++) {
List<Integer> num = new ArrayList<Integer>();
for(int j =1;j<=i;j++) {
if(i%j==0) {
num.add(j);
}
}
map.put(i, num);
}
return map;
}
}
结果
求1000以内的完美数