LeetCode 1390. Four Divisors四因数【Medium】【Python】【数学】
Problem
Given an integer array nums
, return the sum of divisors of the integers in that array that have exactly four divisors.
If there is no such integer in the array, return 0
.
Example 1:
Input: nums = [21,4,7] Output: 32 Explanation: 21 has 4 divisors: 1, 3, 7, 21 4 has 3 divisors: 1, 2, 4 7 has 2 divisors: 1, 7 The answer is the sum of divisors of 21 only.
Constraints:
1 <= nums.length <= 10^4
1 <= nums[i] <= 10^5
问题
给你一个整数数组 nums,请你返回该数组中恰有四个因数的这些整数的各因数之和。
如果数组中不存在满足题意的整数,则返回 0 。
示例:
输入:nums = [21,4,7] 输出:32 解释: 21 有 4 个因数:1, 3, 7, 21 4 有 3 个因数:1, 2, 4 7 有 2 个因数:1, 7 答案仅为 21 的所有因数的和。
提示:
1 <= nums.length <= 10^4
1 <= nums[i] <= 10^5
思路
数学
暴力计算每个数的因数个数。 满足四个,就因数相加。 注意:因数不能重复。
时间复杂度: O(nmax(int(sqrt(x)), 4)),n 为 nums 个数。
*空间复杂度:** O(1)
Python3代码
from typing import List class Solution: def sumFourDivisors(self, nums: List[int]) -> int: sum = 0 for x in nums: if x == 1 or x == 2 or x == 3: continue num = 2 temp = [1, x] # 计算因数 while num ** 2 <= x: # 用 num^2 <= x 比 num <= sqrt(x) 好 if len(temp) > 4: break if not x % num: if num not in temp: temp.append(num) if int(x/num) not in temp: temp.append(int(x/num)) num += 1 # print(temp) if len(temp) == 4: for _ in temp: # print(_) sum += _ return int(sum)