四因数问题

11 阅读1分钟

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

解题思路暴力法: 遍历数组nums,对数组中的每个数字获取所有因数之和以及因数个数,当满足因数个数为4个时,将其添加到最终结果。 优化点: 1、查找因数时,只需循环遍历到sqrt(num)即可。 2、sqrt(num)为整数,则num必然不是4个因数(因数个数为奇数个),可以从int(sqrt(num))开始由大到小开始遍历

def sumFourDivisors(self, nums: List[int]) -> int: 
    res = 0
    for num in nums:
        cnt = 0
        ans = 0
        for i in range(1, int(sqrt(num)//1)+1):
            if num % i == 0:
                cnt += 1
                ans += i
                if i * i == num:
                    continue
                else:
                    cnt += 1
                    ans += num//i
        if cnt == 4:
            res += ans
    return res