1. 题目来源
链接:1390. 四因数
2. 题目说明
3. 题目解析
方法一:暴力+常规解法
暴力计算因数个数,因数是成对出现的,所以不存在同时两个因数都大于当前数的开平方,那么就暴力范围就降至根号当前数了。并且值得注意的一点就是 平方数 的因数只计算一次即可。先模再除顺序不能颠倒,很容易理解。
参见代码如下:
// 执行用时 :68 ms, 在所有 C++ 提交中击败了100.00%的用户
// 内存消耗 :8.6 MB, 在所有 C++ 提交中击败了100.00%的用户
class Solution {
public:
int sumFourDivisors(vector<int>& nums) {
int res = 0;
for (auto& e : nums) {
int cnt = 0, sum = 0;
for (int i = 1; i * i <= e; ++i) {
if (e % i == 0) {
++cnt, sum += i;
if (e / i != i) {
++cnt, sum += e / i;
}
}
}
if (cnt == 4) res += sum;
}
return res;
}
};