Four Divisors

medium array math number theory

Problem

Given an integer array nums, return the sum of divisors of the integers that have exactly four divisors. If no integer in the array has exactly four divisors, return 0.

Inputnums = [21, 4, 7]
Output32
21 has divisors 1, 3, 7, 21 (exactly four), summing to 32. 4 has three divisors and 7 has two, so only 21 contributes.
Inputnums = [1, 2, 3, 4, 5]
Output0
None of these has exactly four divisors.

def sumFourDivisors(nums):
    total = 0
    for n in nums:
        cnt, dsum = 2, 1 + n
        i = 2
        while i * i <= n:
            if n % i == 0:
                cnt += 1
                dsum += i
                if i != n // i:
                    cnt += 1
                    dsum += n // i
                if cnt > 4:
                    break
            i += 1
        if cnt == 4:
            total += dsum
    return total
function sumFourDivisors(nums) {
  let total = 0;
  for (const n of nums) {
    let cnt = 2, dsum = 1 + n;
    for (let i = 2; i * i <= n; i++) {
      if (n % i === 0) {
        cnt++; dsum += i;
        if (i !== Math.floor(n / i)) {
          cnt++; dsum += Math.floor(n / i);
        }
        if (cnt > 4) break;
      }
    }
    if (cnt === 4) total += dsum;
  }
  return total;
}
int sumFourDivisors(int[] nums) {
    int total = 0;
    for (int n : nums) {
        int cnt = 2, dsum = 1 + n;
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                cnt++; dsum += i;
                if (i != n / i) {
                    cnt++; dsum += n / i;
                }
                if (cnt > 4) break;
            }
        }
        if (cnt == 4) total += dsum;
    }
    return total;
}
int sumFourDivisors(vector<int>& nums) {
    int total = 0;
    for (int n : nums) {
        int cnt = 2, dsum = 1 + n;
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                cnt++; dsum += i;
                if (i != n / i) {
                    cnt++; dsum += n / i;
                }
                if (cnt > 4) break;
            }
        }
        if (cnt == 4) total += dsum;
    }
    return total;
}
Time: O(n · √m) Space: O(1)