C ++中的四个除数

假设我们有一个整数数组nums,我们必须找到该数组中正好有四个除数的整数的除数之和。因此,如果数组中没有此类整数,则返回0。例如,如果输入为[21,4,7],则输出将为32,因为21具有四个除数1,3,7,21, 4具有三个除数1、2、4和7具有两个除数1和7。答案仅是21除数的总和。

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个名为的方法ok(),它将x作为输入

  • ret:= 1 + x,cnt:= 2

  • 对于i:= 2,i ^ 2 <= x,将i加1

    • 将ret增加i,将cnt增加1

    • 如果我不是x / i,则将cnt增加1,ret:= ret +(x / i)

    • 如果x可被i整除

    • 返回ret,如果cnt为4,否则返回0

    • 从主要方法

    • ret:= 0,n:= nums的大小

    • 对于i,范围为0至n – 1

      • ret:= ret + ok(nums [i])

    • 返回ret

    范例(C ++)

    让我们看下面的实现以更好地理解-

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       int ok(int x){
          int ret = 1 + x;;
          int cnt = 2;
          for(int i = 2; i * i <= x; i++){
             if(x % i == 0){
                ret += (i);
                cnt++;
                if(i != x / i){
                   cnt++;
                   ret += (x / i);
                }
             }
          }
          return cnt == 4 ? ret : 0;
       }
       int sumFourDivisors(vector<int>& nums) {
          int ret = 0;
          int n = nums.size();
          for(int i = 0; i < n; i++){
             ret += ok(nums[i]);
          }
          return ret;
       }
    };
    main(){
       vector<int> v = {21,4,7};
       Solution ob;
       cout << (ob.sumFourDivisors(v));
    }

    输入项

    [21,4,7]

    输出结果

    32