Viết chương trình tìm số hoàn hảo

Mục tiêu

Làm quen cách viết các chương trình đơn giản, cách sử dụng:


Mô tả bài toán

Viết chương trình nhập số nguyên dương n. Kiểm tra n có phải là số hoàn thiện hay không?

Ví dụ:

  • Input: 6
  • Output: 6 là số hoàn thiện

Hướng dẫn

Định nghĩa

Số hoàn thiện (hay còn gọi là số hoàn chỉnh, số hoàn hảo hoặc số hoàn thành) là một số nguyên dương mà tổng các ước nguyên dương của nó (số nguyên dương chia hết cho nó) bằng chính nó.

Thuật toán

Dựa vào định nghĩa của số nguyên tố chúng ta sẽ có cách giải như sau:

  • Bước 1: Nhập vào n
  • Bước 2: Tính tổng S các số mà n chia hết trong khoảng [1..n-1]
  • Bước 3: Nếu S = n, số n là số hoàn thiện

Bài tập 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 trong C++.

Kteam khuyến khích các bạn tự phân tích đề bài > tự giải bài toán > debug để kiểm tra kết quả và fix lỗi trong quá trình giải. Sau đó, bạn có thể tham khảo source code mẫu để hoàn chỉnh bài tập. 

Để được hỗ trợ tốt nhất, bạn có thể đặt câu hỏi ở phần bình luận bên dưới bài viết hoặc ở mục Hỏi & Đáp.

Source tham khảo

#include 
using namespace std;

// Kiểm tra Số Hoàn Thiện
// Input : 1 số nguyên dương
// Output :
    // True : Là số hoàn thiện
    // False : Không là số hoàn thiện
bool Check_SHT(int N)
{
    int S = 0;
    for (int i = 1; i < N; i++)
        if (N % i == 0)
            S += i;  // S = S + i

    if (S == N)
        return true; // Là số hoàn thiện
    return false;     // Không là số hoàn thiện
}

int main()
{
    int N;
    cout << "N = ";
    cin >> N;

    bool result = Check_SHT(N);
    if (result == true)
        cout << "La SHT";
    else
        cout << "Khong la SHT";


    cout << endl;
    system("pause");
}

Kết luận

Bạn có thể củng cố kiến thức C++ từ khóa Lập trình C++ cơ bản.

Hoặc tìm hiểu thêm các bài tập khác trong khóa Bài toán kinh điển trong lập trình

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của bạn để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

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é!

Nội dung

  • 1. Số hoàn hảo là gì?
  • 2. Bài toán kiểm tra số hoàn thiện
  • 3. Mô tả thuật toán kiểm tra n có phải số hoàn hảo hay không
  • 4. Code tham khảo thuật toán tìm số hoàn hảo c++
  • 5. Kết quả

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ả

Viết chương trình tìm số hoàn hảo

Viết chương trình tìm số hoàn hảo

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é!