Description
Given an integer array nums, return the sum of divisors of the integers in that array that have exactly four divisors. If there is no such integer in the array, return 0.
Example 1:
Input: nums = [21,4,7] Output: 32 Explanation: 21 has 4 divisors: 1, 3, 7, 21 4 has 3 divisors: 1, 2, 4 7 has 2 divisors: 1, 7 The answer is the sum of divisors of 21 only.
Example 2:
Input: nums = [21,21] Output: 64
Example 3:
Input: nums = [1,2,3,4,5] Output: 0
Constraints:
1 <= nums.length <= 1041 <= nums[i] <= 105
Solutions
This final, cleaned-up version drops the helper function and the unused map, doing everything inline in a single loop over nums. For each number it walks i from 1 up to Math.floor(Math.sqrt(num)), and whenever i divides the number evenly it adds both i and its complementary divisor num / i to a Set — the set deduplicates automatically (important for perfect squares where i === num / i) — breaking early the moment more than four divisors accumulate. If a number ends up with exactly four divisors, reduce sums them and adds the total to res; numbers with any other divisor count contribute nothing. The accumulated res is the answer returned.
/**
* @param {number[]} nums
* @return {number}
*/
var sumFourDivisors = function(nums) {
let res = 0;
for (const num of nums) {
const len = Math.floor(Math.sqrt(num));
const divisors = new Set();
for (let i = 1; i <= len; i++) {
if (num % i === 0) {
divisors.add(i);
divisors.add(num / i);
if (divisors.size > 4) {
break;
}
}
}
if (divisors.size === 4) {
res += [...divisors].reduce((acc, el) => acc + el, 0);
}
}
return res;
};