[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ố hoàn hảo là một trong những bài kinh điển khi học môn lập trình cơ sở c++. Kiểm tra số hoàn thiện có nhiều cách giải khác nhau, sau đây hãy cùng TTnguyen tham khảo một số 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<bits/stdc++.h>
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<stdio.h>
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<<N<<" khong la so hoan hao";
    }
}

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ố hoàn hảo c++ chỉ mang tính tham khảo, hỗ trợ các bạn làm quen và luyện tập với các bàn toán lập trình cơ bản. Để giải quyết được bài này bạn cần có 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 cứ thắc mắc nào thì đừng ngần ngại liên hệ với mình nhé!

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em