Viết chương trình in ra các số hoàn hảo C++

  • C/C++
  • Lập trình
  • Thuật toán

Kiểm tra số hoàn hảo trong lập trình C/C++

By
admin
-
24 Tháng Tư, 2021
0
5798
Facebook
Twitter
Pinterest
WhatsApp

Thuật toán kiểm tra số hoàn hảo trong C/C++. Ứng dụng vào bài toán tìm, liệt kê số hoàn hảo trong mảng các số nguyên dương n phần tử, số hoàn thiện nhỏ hơn n.

Mục lục bài viết

  • 1. Số hoàn hảo là gì?
  • 2. Kiểm tra số hoàn hảo C/C++
  • 3. Lời kết

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

Số hoàn hảo (perfect number) hay còn gọi là số hoàn thiện là số: nguyên dương mà tổng các ước nguyên dương chính thức của nó bằng chính nó.
Ước chính thức là các ước mà số đó chia hết trừ nó và bao gồm cả số 1.

Ví dụ số hoàn hảo:

  • 6 là số hoàn hảo, các ước chính thức của 6: 1, 2, 3
    Ta có : 6 = 1 + 2 + 3
  • 28 là số hoàn hảo: 1 + 2 + 4 + 7 + 14 = 28
  • 10 không phải số hoàn hảo: 1+ 2 + 5 = 8 (khác 10)
Công thức tính số hoàn hảo

Ta sẽ giải quyết bài toán áp dụng tư tưởng theo đúng định nghĩa. Để kiếm tra số nguyên dương n có phải là số hoàn hảo hay không, thuật toán đưa ra ở đây chính là duyệt và tìm tất cả các ước của n sau đó cộng lại.

Áp dụng vào lập trình ta sẽ giải quyết nó như sau:

  • Khai báo một biến tam = 0; biến này sẽ dùng để tính tổng các ước
  • Sử dụng vòng lặp i từ 0 đến nhỏ hơn n. Nếu i là ước của n (tức là n % i ==0) thì ta cộng tam với i : tam = tam + i;
  • So sánh tam với ntam với 0. Nếu tam == ntam !=0 thì tức là số đó là số hoàn hảo, ngược lại thì không.

Sẽ có bạn thắc mắc tại sao ta không xét trường hợp n < 1. Thật ra với cách làm nêu trên, ta cho vòng lặp for từ 0 đến nhỏ hơn n. Vì thế, nếu n nhỏ hơn 1 thì ta luôn thu được tam =0. mà tam =0 thì ta đã loại rồi.

2. Kiểm tra số hoàn hảo C/C++

Mình sẽ triển khai hàm kiểm tra một số nguyên dương n có phải là số hoàn hảo hay không dựa theo đúng ý tưởng nêu ở phần 1 nhé!

Code C/C++:

// Ham kiem tra so hoan hao bool kt_hoanhao(int n){ int tam =0; // Khai báo biến tạm lưu tổng các ước for(int i=1; i<n; i++){ if(n% i == 0) // Nếu n chia hết cho i => i là ước chính thức của n tam = tam + i; // cộng vào tổng các ước } if(tam !=0 && tam == n) // Nếu tổng các ước khác 0 và bằng n trả về true return true; else // Nếu tam khác n hoặc tam ==0 thì trả về false return false; }

Khi có hàm kiểm tra số hoàn thiện, ta có thể áp dụng vào các bài tập tương ứng. Ví dụ như (in các số hoàn hảo trong mảng, các số ht nhỏ hơn n . . .)

Dưới đây mình triển khai chương trình in ra tất cả các số hoàn thiện trong mảng trong C++ nhé!

Code C++:

#include<iostream> using namespace std; // Ham kiem tra so hoan hao bool kt_hoanhao(int n){ int tam =0; for(int i=1; i<n; i++){ if(n% i == 0) tam = tam + i; } if(tam != 0 && tam == n) return true; else return false; } // Ham in mang void printarr(int a[], int n){ for(int i=0; i<n; i++) cout<<" "<<a[i]; } // Input array from keyboard void iparr(int a[], int &n){ cout<<"Nhap n: "; cin>>n; cout<<"Nhap mang: "<<endl; for(int i=0; i<n; i++) cin>>a[i]; } // In so hoan hao trong day void in_sohoanhao(int a[], int n){ cout<<"Cac so hoan hao day: "; for(int i =0; i<n; i++){ if(kt_hoanhao(a[i])) // Neu la so hoan hao thi in cout<<a[i]<<" "; } } int main(){ int a[100]; int n; iparr(a,n); // Nhap gia tri in_sohoanhao(a,n); // In so hoan hao trong mang return 0; }

3. Lời kết

Perfect number là một dạng bài tập khá hay, nó giúp bạn hiểu hơn về tư duy lập trình, cách kết hợp vòng lặp, câu điều kiện . . . Từ đó giúp bạn cải thiện về kĩ năng của bản thân. Luyện tập từ những thứ nhỏ nhất, bạn sẽ thấy được sự phát triển của mình.

Bài viết của mình đến đây là hết, nếu bạn có lời khuyên gì cho mình hay bất kỳ thắc mắc nào, đừng ngại để lại comment xuống phía dưới bài viết nhé!

Xem thêm các bài viết về thuật toán, lập trình C/C++ khác của mình tại đây.

  • TAGS
  • C/C+
  • Cấu trúc dữ liệu và Thuật toán
  • Học lập trình
Facebook
Twitter
Pinterest
WhatsApp
Previous articleTìm hiểu về thư viện Algorithm trong C++
Next articleMảng hai chiều C/C++ | Ma trận số nguyên