给你一个整数数组 nums,请你返回该数组中恰有四个因数的这些整数的各因数之和。如果数组中不存在满足题意的整数,则返回 0
解题思路
遍历数组中的每个元素,依次判断这些元素是否恰好有四个因数。对于任一元素 x,如果整数 x 有因数 y,那么也必有因数 x/y,并且 y 和 x/y 中至少有一个不大于 sqrt(x)。这样我们只需要在 [1, sqrt(x)] 的区间内枚举可能为整数 x 的因数 y,并通过 x/y 得到整数 x 的其它因数。如果 x 恰好有四个因数,我们就将其因数之和累加到答案中
class Solution {
public int sumFourDivisors(int[] nums) {
int result = 0;
for(int num : nums) {
// factor_count 因数的个数,factor_sum 因数的和
int factor_count = 0, factor_sum = 0;
for(int i = 1; i * i <= num; i++) {
// i 是 num 的一个因数
if(num % i == 0) {
factor_count++;
factor_sum += i;
// 判断 i 和 num/i 是否相等
// 不相等才能将 num/i 加入
if(i * i != num) {
factor_count++;
factor_sum += num/i;
}
}
}
if(factor_count == 4) {
result += factor_sum;
}
}
return result;
}
}