Hỗ trợ: xuất hoá đơn GTGT 8%.
Móc khóa mica Tại Xưởng
2.100+ Đã đặt hàng

Móc Khóa Mica & Standee

In Anime, Logo Trường, Lớp Học
MUA 1 TẶNG 1 HÔM NAY
Free Thiết Kế Freeship từ 10c

code kiểm tra số hoàn hảo bằng C++

code kiểm tra số hoàn hảo bằng C++

code kiểm tra số hoàn hảo bằng C++
Hỏi bởi:
3 câu trả lời
▲ 7✔
Chào các em học sinh lớp 8 thân mến! Cô rất vui được đồng hành cùng các em trong buổi học hôm nay. Hôm nay, chúng ta sẽ cùng nhau tìm hiểu về một loại số rất đặc biệt, đó là “số hoàn hảo”, và cách viết chương trình C++ để kiểm tra xem một số có phải là số hoàn hảo hay không nhé.

Trước tiên, các em hãy nhớ lại kiến thức đã học về các phép toán cơ bản trong lập trình C++ và cách sử dụng vòng lặp. Đó sẽ là những công cụ quan trọng để chúng ta giải quyết bài toán này.

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

Số hoàn hảo là một số nguyên dương, có tính chất đặc biệt là tổng các ước số dương của nó (không bao gồm chính nó) bằng chính nó.

Ví dụ:
– Số 6: Các ước số dương của 6 là 1, 2, 3, 6.
Các ước số dương không bao gồm chính nó là 1, 2, 3.
Tổng các ước số này là: 1 + 2 + 3 = 6.
Vì vậy, 6 là một số hoàn hảo.

– Số 28: Các ước số dương của 28 là 1, 2, 4, 7, 14, 28.
Các ước số dương không bao gồm chính nó là 1, 2, 4, 7, 14.
Tổng các ước số này là: 1 + 2 + 4 + 7 + 14 = 28.
Vì vậy, 28 là một số hoàn hảo.

2. Ý tưởng để viết chương trình

Để kiểm tra một số \(n\) có phải là số hoàn hảo hay không, chúng ta cần thực hiện các bước sau:
a. Tìm tất cả các ước số dương của \(n\) (trừ \(n\)).
b. Tính tổng của các ước số tìm được.
c. So sánh tổng này với chính số \(n\). Nếu bằng nhau thì \(n\) là số hoàn hảo, ngược lại thì không phải.

3. Tìm các ước số của một số

Làm thế nào để tìm các ước số của một số \(n\)? Một số \(i\) được gọi là ước của \(n\) nếu \(n\) chia hết cho \(i\) và \(i\) là số nguyên dương.
Trong lập trình, chúng ta có thể sử dụng toán tử chia lấy dư (\(%\)) để kiểm tra điều này. Nếu \(n % i == 0\) thì \(i\) là một ước của \(n\).

Chúng ta sẽ cần kiểm tra tất cả các số nguyên dương từ 1 cho đến \(n-1\) xem chúng có phải là ước của \(n\) hay không.

4. Viết chương trình C++

Bây giờ, chúng ta sẽ cùng nhau viết code C++ để thực hiện ý tưởng trên.

cpp
#include // Thư viện này cho phép chúng ta nhập xuất dữ liệu

int main() {
int n; // Khai báo biến n để lưu số cần kiểm tra
int tong_uoc = 0; // Khai báo biến tong_uoc để lưu tổng các ước số, khởi tạo bằng 0

// Bước 1: Yêu cầu người dùng nhập vào một số nguyên dương
std::cout << "Nhap mot so nguyen duong: "; std::cin >> n;

// Bước 2: Tìm các ước số và tính tổng
// Chúng ta sẽ duyệt qua tất cả các số từ 1 đến n-1
// Sử dụng vòng lặp for
for (int i = 1; i < n; ++i) { // Kiểm tra xem i có phải là ước của n không if (n % i == 0) { // Nếu i là ước, cộng nó vào biến tong_uoc tong_uoc = tong_uoc + i; } } // Bước 3: Kiểm tra xem số đó có phải là số hoàn hảo hay không // So sánh tong_uoc với n if (tong_uoc == n) { // Nếu bằng nhau, in ra thông báo là số hoàn hảo std::cout << n << " la mot so hoan hao." << std::endl; } else { // Nếu không bằng nhau, in ra thông báo là không phải số hoàn hảo std::cout << n << " khong phai la so hoan hao." << std::endl; } return 0; // Kết thúc chương trình } 5. Giải thích chi tiết từng phần của code

* \(#include \): Dòng này khai báo rằng chúng ta sẽ sử dụng các chức năng từ thư viện \(iostream\), bao gồm \(std::cout\) để in ra màn hình và \(std::cin\) để đọc dữ liệu từ bàn phím.

* \(int main() { … }\): Đây là hàm chính của chương trình, nơi mà mọi thứ bắt đầu chạy.

* \(int n;\): Khai báo một biến có tên là \(n\) với kiểu dữ liệu là \(int\) (số nguyên). Biến này sẽ được dùng để lưu trữ số mà người dùng nhập vào.

* \(int tong_uoc = 0;\): Khai báo một biến có tên là \(tong_uoc\) với kiểu dữ liệu là \(int\) và khởi tạo giá trị ban đầu là 0. Biến này sẽ dùng để tích lũy tổng của các ước số tìm được.

* \(std::cout << "Nhap mot so nguyen duong: ";\): Lệnh này sẽ hiển thị dòng chữ "Nhap mot so nguyen duong: " trên màn hình, yêu cầu người dùng nhập liệu. * \(std::cin >> n;\): Lệnh này sẽ đợi người dùng nhập một số nguyên từ bàn phím và lưu giá trị đó vào biến \(n\).

* \(for (int i = 1; i < n; ++i) { ... }\): Đây là một vòng lặp \(for\). * \(int i = 1;\): Khởi tạo biến đếm \(i\) với giá trị là 1. Chúng ta bắt đầu kiểm tra ước từ số 1. * \(i < n;\): Điều kiện để vòng lặp tiếp tục chạy. Vòng lặp sẽ chạy chừng nào \(i\) còn nhỏ hơn \(n\). Chúng ta chỉ cần kiểm tra các số nhỏ hơn \(n\) vì ước số dương của \(n\) (không bao gồm chính nó) sẽ không bao giờ lớn hơn hoặc bằng \(n\). * \(++i;\): Sau mỗi lần lặp, giá trị của \(i\) sẽ tăng lên 1. * \(if (n % i == 0) { ... }\): Bên trong vòng lặp, chúng ta sử dụng câu lệnh \(if\) để kiểm tra. * \(n % i\): Đây là phép toán chia lấy dư. Nó trả về phần dư khi \(n\) chia cho \(i\). * \(n % i == 0\): Điều kiện này sẽ đúng (true) nếu \(n\) chia hết cho \(i\) (tức là \(i\) là ước của \(n\)). * \(tong_uoc = tong_uoc + i;\): Nếu điều kiện \(n % i == 0\) là đúng, tức là \(i\) là một ước của \(n\), thì giá trị của \(i\) sẽ được cộng vào biến \(tong_uoc\). Dòng này có thể viết gọn là \(tong_uoc += i;\). * \(if (tong_uoc == n) { ... } else { ... }\): Sau khi vòng lặp kết thúc (tức là chúng ta đã kiểm tra hết tất cả các số từ 1 đến \(n-1\)), chúng ta sẽ thực hiện bước so sánh cuối cùng. * \(tong_uoc == n\): Kiểm tra xem tổng các ước số đã tính được có bằng với số \(n\) ban đầu hay không. * Nếu điều kiện đúng, \(std::cout << n << " la mot so hoan hao." << std::endl;\) sẽ được thực thi, thông báo rằng \(n\) là số hoàn hảo. * Nếu điều kiện sai, \(std::cout << n << " khong phai la so hoan hao." << std::endl;\) sẽ được thực thi, thông báo rằng \(n\) không phải là số hoàn hảo. * \(std::endl\): Lệnh này dùng để xuống dòng sau khi in. * \(return 0;\): Dòng này báo hiệu rằng chương trình đã kết thúc thành công. 6. Vài điểm cần lưu ý

* Chương trình này chỉ kiểm tra với số nguyên dương. Nếu các em muốn kiểm tra với số âm hoặc số 0, chúng ta cần thêm các điều kiện xử lý riêng.
* Đối với những số rất lớn, cách kiểm tra này có thể hơi chậm. Tuy nhiên, trong phạm vi kiến thức lớp 8, đây là cách tiếp cận hợp lý và dễ hiểu nhất.

Vậy là chúng ta đã cùng nhau tìm hiểu về số hoàn hảo và cách viết chương trình C++ để kiểm tra nó. Các em hãy thực hành code này trên máy tính của mình và thử với các số khác nhau nhé! Nếu có bất kỳ câu hỏi nào, đừng ngần ngại hỏi cô nhé. Chúc các em học tốt!

Trả lời bởi: Giáo viên Chuyên Môn
▲ 1

Giải thích các bước giải:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll TU(ll n)
{
    int cnt=0;
    for(ll i=1;i*i<n;i++)
    {
        if(!(n%i))
            cnt+=i+n/i;
        if(i*i==n)
            cnt-=i;
    }
    return cnt;
}
int main()
{
    ll n;
    cin>>n;
    if(TU(n)-n==n)
        cout<<“YES”;
    else
        cout<<“NO”;
}

Trả lời bởi: Minamto Namikaze
▲ 1

Thuật toán: Tạo 1 hàm tính tổng các ước của 1 số (Thuật toán duyệt căn, có thể tìm hiểu thêm). Sau đó trừ đi chính nó, vì chính số đó là ước lớn nhất của nó. Kiểm tra xem nó có bằng chính số đó hay không.

\(\texttt{C++}\)

#include <bits/stdc++.h>

using namespace std;

long long tonguoc(long long n)
{
    int s = 0;
    for(long long i = 1; i * i <= n; i++)
    {
        if(n%i==0)
        {
            s+=i;
            if(n/i!=i) s+=n/i;
        }
    }
    return s;
}

int main()
{
    long long n;
    cin>>n;
    if(tonguoc(n)-n==n) cout<<“YES”;
    else cout<<“NO”;
}

Trả lời bởi:

Viết một bình luận

Cam kết từ xưởng
Cam kết giải quyết 100% sự cố và có test màu, test mẫu
Test màu Test mẫu
Đơn hàng gặp vấn đề (tracking, hàng lỗi, in sai, thiếu sót)? Chúng tôi sẵn sàng hỗ trợ bạn!
Hỗ trợ qua Zalo ngay
Test màu
Kiểm tra màu trước khi in hàng loạt, tránh lệch so với thiết kế.
Test mẫu
Duyệt mẫu thực tế trước khi sản xuất số lượng lớn.
Đổi trả & hoàn tiền
Hàng lỗi hoặc in sai được xử lý theo chính sách rõ ràng.
Hỗ trợ tracking
Đơn chậm hoặc thiếu mã vận đơn, nhắn Zalo để được kiểm tra ngay.
WhatsApp
Facebook
Chat Zalo
Zalo
097.538.4646
Zalo
Giới Thiệu Xưởng In