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