Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Bốn Ước Số Trong C++


Giả sử chúng ta có mảng số nguyên nums, tìm tổng các ước số của những số trong mảng có chính xác bốn ước số. Nếu không có số nào, trả về 0. Ví dụ: [21, 4, 7] → 32, vì 21 có bốn ước 1,3,7,21 (tổng 32), 4 có ba ước, 7 có hai ước.

Để giải quyết, chúng ta làm theo các bước:

  • Định nghĩa phương thức ok(x): ret = 1 + x, cnt = 2.

  • Với i từ 2 đến sqrt(x): nếu x chia hết cho i, tăng ret thêm i, cnt++; nếu i != x/i, tăng cnt và ret thêm x/i.

  • Trả về ret nếu cnt == 4, ngược lại 0.

  • Từ phương thức chính: ret = 0; với mỗi số trong nums: ret += ok(nums[i]); trả về ret.

Ví dụ (C++)

Hãy xem triển khai sau để hiểu rõ hơn:

#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;
    }
};

int main(){
    vector<int> v = {21,4,7};
    Solution ob;
    cout << (ob.sumFourDivisors(v));
}

Đầu vào

[21,4,7]

Đầu ra

32