四因数


给你一个整数数组 nums,请你返回该数组中恰有四个因数的这些整数的各因数之和。如果数组中不存在满足题意的整数,则返回 0


解题思路

遍历数组中的每个元素,依次判断这些元素是否恰好有四个因数。对于任一元素 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;
    }
}

原文地址:https://www.cnblogs.com/Yee-Q/p/14037106.html