题目:亲和数是指这样的两个数,互为对方的约数(除自身以外)之和。求10000以内所有的亲和数对。目前思路只知道使用数组和循环语句,但关于如何表达出亲和数的性质不明白
亲和数的定义不是写了嘛。最直接的按照定义来写,先求和,然后判断是不是对方,两个数都满足这个条件就是亲和数
public static void main(String[] args) throws IOException {
/** 求亲和数对 **/
Scanner scanner = new Scanner(System.in);
int input = scanner.nextInt();
// key 公约数之和 ,value 倍数集合
Map<Integer, List<Integer>> result = new HashMap<>();
// 获取所有约数之和
for (int i = 1; i < input + 1; i++) {
// 获取公约数
Integer addAll = getCommonDivisorAdd(i);
if (addAll == 0) {
// 公约数为0 过
continue;
}
List<Integer> integers = result.get(addAll) == null ? new ArrayList<>() : result.get(addAll);
integers.add(i);
result.put(addAll,integers);
}
result.forEach((addAll,list)->{
if(list.size() > 1){
System.out.println(addAll + list.toString());
}
});
}
public static Integer getCommonDivisorAdd(int input) {
// 已计算公约数
List<Integer> list = new ArrayList<>();
Integer result = 0;
for (int i = input - 1; i > 0; i--) {
if (input % i == 0 && !list.contains(i)) {
result = result + i;
list.add(i);
}
}
return result;
}