四因數


給你一個整數數組 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;
    }
}
相關文章
相關標籤/搜索