[C++] Kiểm tra số hoàn hảo có CODE mẫu và thuật toán

Bài toán kiểm tra số tuyệt vời là một trong những bài tầm cỡ khi học môn lập trình cơ sở c + +. Kiểm tra số hoàn thành xong có nhiều cách giải khác nhau, sau đây hãy cùng TTnguyen tìm hiểu thêm 1 số ít cách giải nhé !

1. Số hoàn hảo là gì?

Số hoàn hảo hay còn gọi là số hoàn thiện, đó là một số nguyên dương lớn hơn 0 và có tổng các ước (ngoại trừ số đó) bằng chính nó.

Ví dụ :

  • Số 6 là một số hoàn hảo vì tổng các ước số thật sự của số 6 là: 1 + 2 + 3 = 6 (tức là bằng chính nó)
  • Số 12 không phải là một số hoàn hảo vì tổng các ước số thực sự của số 12 là: 1 + 2 + 3 + 4 + 6 = 16 (khác với chính nó)

Bốn số hoàn hảo đầu tiên được những người Hy Lạp cổ đại tìm ra. Đó là các số 6,28, 496 và 8128.

2. Bài toán kiểm tra số hoàn thiện

Một số hoàn thiện là một số có tổng các ước của nó (không kể nó) bằng chính nó. Hãy nhập vào một số nguyên dương n và kiểm tra xem n có phải là số hoàn thiện không.
Ví dụ: số 6 là số hoàn thiện vì tổng các ước số là 1+2+3=6.

3. Mô tả thuật toán kiểm tra n có phải số hoàn hảo hay không

3.1. Thuật toán tìm ước thật sự của n

  • Đầu tiên ta tìm các ước số thật sự của số n
  • Ta dùng một biến s=0 để tính tổng các ước số thật sự của n
  • Sử dụng vòng lặp for và câu lệnh điều kiên if để kiểm tra n có chia hết i hay không. Nếu chia hết thì s=s+i;

3.2. Thuật toán in ra dãy số hoàn hảo trong c++

  • Kết thúc vòng lặp, kiểm tra nếu s == n  thì n chính là số hoàn hảo

4. Code tham khảo thuật toán tìm số hoàn hảo c++

4.1.Sử dụng vòng lặp for kiểm tra số hoàn thiện

#include

using namespace std;
int main() {
  int n, i, s = 0;
  cout << "nhap so nguyen duong n: ";
  cin >> n;
  if (n < 6) cout << n << " khong la so hoan thien";
  else {
    for (i = 1; i < n - 1; i++)
      if (n % i == 0) s = s + i;
    if (s == n) cout << n << " la so hoan thien";
    else cout << n << " khong la so hoan thien";
  }
}

Chú ý: các ước số thật sự của n luôn bé hơn hoặc bằng n/2 (hoặc sqrt(n/2)). Các bạn dùng điều kiện này để giới hạn vòng for lại giúp tối ưu cách giải.

4.2. Sử dụng vòng lặp while để kiểm tra số hoàn hảo

#include

int main() {
    int N;
    int S = 0;
    do {
      cout << "nhap N: ";
      cin >> N;
      if (N <= 0) {
        cout << ("\n N phai > 0. Xin nhap lai !");
      }
    } while (N <= 0);

    int i = 1;
    while (i <= N - 1) {
      if (N % i == 0) //kiem tra uoc cua N
      {
        S += i; //moi lan lap bien S tang len i
      }
      i++; //moi lan lap i tang 1
    }
    if (S == N) //neu S=N thi N la so hoan hao
    {
      cout << N << "la so hoan hao";
    } else {
      ` cout<

5. Kết quả

Kết quả 1

Kết quả 2

Trên đây là cách giải bài tập kiểm tra số tuyệt vời và hoàn hảo nhất c + + chỉ mang tính tìm hiểu thêm, tương hỗ những bạn làm quen và rèn luyện với những bàn toán lập trình cơ bản. Để xử lý được bài này bạn cần có kỹ năng và kiến thức cơ bản cũng như nắm vững cấu cấu vòng lặp for, if … else. Nếu có bất kỳ vướng mắc nào thì đừng ngần ngại liên hệ với mình nhé !