Bài toán về số hoàn thiện trong C++

39
Lập trình C++

Bài toán. Số n được gọi là số hoàn thiện nếu tổng các ước của n gấp đôi n.

Ví dụ: 6 là số hoàn thiện vì 6 chia hết cho 1, 2, 3, 6 và: 1 + 2 + 3 + 6 = 12 = 2.6

  1. a) Kiểm tra n có là số hoàn thiện không? Nếu có ghi ra 1 ngược lại ghi 0
  2. b) Tìm các số hoàn thiện nhỏ hơn hoặc bằng n
  3. c) Tìm các số hoàn thiện nằm trên đoạn [m, n].

Yêu cầu: nhập vào 2 số m, n. Kết quả ghi thành 3 dòng thể hiện 3 nội dung trên. Ví dụ: 

SOHT.INP

SOHT.OUT

16 1000

0

6 28 496

28 496

Code tham khảo:

#include <iostream>
using namespace std;
int soht(int n) {
    int tong = 0;
    for (int i = 1; i <= n/2; i++) {
        if (n % i == 0) tong += i;
    }
    if (tong+n == 2*n) return 1;
    else return 0;
}
int main() {
    freopen("SOHT.INP","r",stdin);
    freopen("SOHT.OUT","w",stdout);
    int m, n;
    cin >> m >> n;
    if(soht(n)) cout << 1 << endl;
    else cout << 0 << endl;
    for (int i = 1; i <= n; i++) {
        if (soht(i)) cout << i << " ";
    }
    cout << endl;
    for (int i = m; i <= n; i++) {
        if (soht(i)) cout << i << " ";
    }
    return 0;
}