Four Divisors
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.
Constraints:
1 <= nums.length <= 10^4
1 <= nums[i] <= 10^5
Solution(javascript)
/** https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
* @param {number[]} nums
* @return {number}
*/
const max = 10 ** 5
const memo = new Array(max + 1).fill(0).map(() => [1])
for (let divisor = 2; divisor <= max; divisor++) {
for (let num = 1; num * divisor <= max; num++) {
memo[num * divisor].push(divisor)
}
}
const sumFourDivisors = function (nums) {
const sum = (arr = []) => arr.reduce((acc, x) => acc + x, 0)
return nums.reduce((acc, num) => {
if (memo[num].length === 4) {
return acc + sum(memo[num])
}
return acc
}, 0)
}