給你一個整數數組 nums,請你返回該數組中恰有四個因數的這些整數的各因數之和。若是數組中不存在知足題意的整數,則返回 0java
遍歷數組中的每一個元素,依次判斷這些元素是否剛好有四個因數。對於任一元素 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; } }