Skip to content

Latest commit

 

History

History
60 lines (50 loc) · 1.33 KB

File metadata and controls

60 lines (50 loc) · 1.33 KB

1390. Four Divisors

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 <= 104
  • 1 <= nums[i] <= 105

Solutions (Rust)

1. Solution

impl Solution {
    pub fn sum_four_divisors(nums: Vec<i32>) -> i32 {
        let mut ret = 0;

        for &x in &nums {
            let mut tmp = 0;

            for y in 2..=(x as f64).sqrt() as i32 {
                if x % y == 0 {
                    if tmp > 0 || x == y * y {
                        tmp = 0;
                        break;
                    }
                    tmp += y + x / y;
                }
            }

            if tmp > 0 {
                ret += 1 + x + tmp;
            }
        }

        ret
    }
}