首页 > 其他 > 详细

四因数

时间:2020-11-25 22:27:59      阅读:26      评论:0      收藏:0      [点我收藏+]

给你一个整数数组 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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!