参考:https://leetcode-cn.com/problems/four-divisors/solution/shi-yong-su-shu-shai-zi-chao-guo-100-by-kongyifei/
class Solution {
public:
int sumFourDivisors(vector<int>& nums) {
/*筛选素数*/
bitset<50010>dp(0);
vector<int>primes;
dp[2] = 0;
for(int i = 2; i < 50010; i++)
{
if(dp[i] == 0)
{// == 0表示是素数
primes.push_back(i);
for(int j = i*2; j < 50010; j += i)
{
dp[j] = 1; //1表示不是素数
}
}
}
//找有四个因子的数
long long res = 0;
for(auto x: nums)
{
for(auto prime : primes)
{
if(prime*prime > x)
{//x不可能符合了
break;
}
if(prime*prime*prime == x)
{
res += 1 + x + prime + prime*prime;
break;
}
if(x % prime == 0 && dp[x/prime] == 0 && prime*prime != x)
{
res += 1 + x + prime + x/prime;
break;
}
}
}
return res;
}
};
class Solution {
public:
int sumFourDivisors(vector<int>& nums) {
auto sum = 0;
for (auto n : nums) {
auto last_d = 0;
for (auto d = 2; d * d <= n; ++d) {
if (n % d == 0) {
if (last_d == 0)//第一对因子
last_d = d;
else {//如果出现了第二对因子
last_d = 0;
break;
}
}
}
if (last_d > 0 && last_d != n / last_d) { //这两个因子不能一样
sum += 1 + n + last_d + n / last_d;
}
}
return sum;
}
};
https://leetcode.com/problems/four-divisors/discuss/547252/C%2B%2BJava-Easy-Check