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
给定一个数组,问其中哪些数只有4个因子,把只有4个因子的数对应的所有因子加起来。
也是很无聊的一个题,按题意照做即可,注意求解因子的时候只需要循环到sqrt(v)即可,因为如果一个因子大于sqrt(v)的话,其对应的另一个因子肯定小于sqrt(v),也就是之前已经遍历过了。
完整代码如下:
class Solution {
public:
void FindDivisors(int v, vector<int>& ans) {
int mid = sqrt(v);
for (int i = 1; i <= mid; ++i) {
if (v%i == 0) {
ans.push_back(i);
if (v / i != i)ans.push_back(v / i);
}
}
}
int sumFourDivisors(vector<int>& nums) {
int ans = 0;
for (int i = 0; i < nums.size(); ++i) {
vector<int> divs;
FindDivisors(nums[i], divs);
if (divs.size() == 4) {
for (int j = 0; j < divs.size(); ++j)ans += divs[j];
}
}
return ans;
}
};
本代码提交AC,用时440MS。