Số gần hoàn hảo

Xem dạng PDF

Gửi bài giải

Điểm: 0,01 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: GHH.INP
Output: GHH.OUT

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Một số nguyên dương ~A~ được gọi là số "gần hoàn hảo" nếu thỏa mãn điều kiện: ~2 \times A \le K~, với ~K~ là tổng các ước số của ~A~.

Ví dụ: ~12~ là một số "gần hoàn hảo" vì ~2 \times 12 \lt 1 + 2 + 3 + 4 + 6 + 12~.

Yêu cầu: Cho một dãy số nguyên dương, hãy in ra các số "gần hoàn hảo".

Input

Vào từ file GHH.INP có cấu trúc như sau:

  • Dòng đầu tiên chứa số nguyên dương ~N~ (~0 \lt N \le 10^4~).

  • ~N~ dòng tiếp theo, mỗi dòng là một số nguyên dương có giá trị không vượt quá ~10^6~.

Output

Ghi ra file GHH.OUT gồm:

  • Dòng đầu tiên ghi số lượng số "gần hoàn hảo".

  • Các dòng tiếp theo, mỗi dòng ghi một số "gần hoàn hảo", số gặp trước thì viết trước.

Sample Input 1

5
8
16
12
6
7

Sample Output 1

2
12
6

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    soncris779  đã bình luận lúc 18, Tháng 11, 2025, 2:30

    include<bits/stdc++.h>

    include<algorithm>

    include<vector>

    include<unordered_map>

    include<set>

    define pb push_back

    define endl "\n"

    define ll long long

    define siu cin.tie(nullptr)->syncwithstdio(false);

    using namespace std; ll check(ll n) { ll res = 1;

    for (ll p = 2; p * p <= n; p++) {
        if (n % p == 0) {
            ll sumP = 1;
            ll powP = 1;
            while (n % p == 0) {
                n /= p;
                powP *= p;
                sumP += powP;
            }
            res *= sumP;
        }
    }
    
    if (n > 1) res *= (1 + n); 
    
    return res;
    

    }

    void solve() { ll n; cin >> n; vector<ll>a(n); vector<ll>v; for(ll &x : a) { cin >> x; if(x * 2 <= check(x)) { v.pb(x); } } cout << v.size()<<endl; for(ll x : v) { cout << x <<endl; } } int main() { //freopen("GHH.INP","r",stdin); //freopen("GHH.OUT","w",stdout); siu; solve(); return 0; }


  • 0
    tranhongminh21082007  đã bình luận lúc 18, Tháng 11, 2025, 0:52
    #include <bits/stdc++.h>
    using namespace std;
    
    long long sumDiv(long long n) {
        long long s = 0;
        for(long long i = 1; i * i <= n; i++) {
            if(n % i == 0) {
                s += i;
                if(i * i != n) s += n / i;
            }
        }
        return s;
    }
    int main() {
        int N;
        cin >> N;
        vector&lt;long long> a(N), ans;
        for(int i = 0; i < N; i++) cin >> a[i];
    
        for(int i = 0; i < N; i++) {
            long long n = a[i];
            if(sumDiv(n) == 2*n - 1) {
                ans.push_back(n);
            }
        }
        cout << endl;
        cout << ans.size() << "\n";
        for(long long x : ans) cout << x << "\n";
    
        return 0;
    }
    

  • -2
    mhieu_uu  đã bình luận lúc 28, Tháng 9, 2025, 14:22 chỉnh sửa

    hay


  • -3
    hahuu5972  đã bình luận lúc 23, Tháng 9, 2025, 14:50 chỉnh sửa

    jjj


  • -6
    THPTHD_Hieu  đã bình luận lúc 12, Tháng 5, 2025, 7:32

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • -7
      RussVN123  đã bình luận lúc 14, Tháng 5, 2025, 8:04

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


      • -6
        THPTHD_Hieu  đã bình luận lúc 15, Tháng 5, 2025, 1:35

        Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -12
    hvycutis1tg  đã bình luận lúc 9, Tháng 5, 2025, 23:05

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.