2
Kiểm tra một số có phải là số hoàn hảo hay không trong C/C++?
2
thephuong30 đã đăng:

Mọi người ai có thể giúp em giải thích và lập trình bài toán:

Cho số nguyên dương n, viết chương trình kiểm tra xem n có phải là số hoàn hảo hay không?

thêm bình luận...
3
Văn Luân50 đã đăng:

Bài toán của bạn cũng khá hay, muốn lập trình được bài toán này, trước hết bạn phải hiểu được số hoàn hảo là gì trước, sau đó mới từ tính chất của số hoàn hảo bạn mới lập trình được.

Mình sẽ nói về khái niệm số hoàn hảo trước nhé. Trước tiên, bạn hãy xem ví dụ sau:

  • 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ó)

Trong ví dụ trên có khái niệm ước số. Vậy ước số là gì? Giả sử có hai số $a$ và $b$, nếu $a$ chia hết cho $b$ thì $b$ được gọi là ước số của $a$. Ước số thật sự là ước số không bao gồm chính nó. Ví dụ:

  • Các ước số của số 6 bao gồm: 1, 2, 3 và 6. Vậy, ước số thật sự của số 6 bao gồm: 1, 2, 3.

Từ đó, mình đi đến khái niệm số hoàn hảo là một số mà tổng các ước số thật sự bằng chính nó. Đến đây chắc bạn đã hiểu.

Bây giờ mình sẽ giải thích đoạn chương trình xét một số có phải là số hoàn hảo hay không?

#include <stdio.h>
#include <conio.h>


// Hàm kiểm tra số hoàn chỉnh
bool ktSoHoanChinh(int n){
    int sum = 0;

    //Chạy vòng lặp từ 1 đến số n đã cho
    for(int i = 1; i < n; i++){

        // Đối với mỗi số đi qua
        // Kiểm tra xem n có chia hết cho số đó hay không.
        if (n % i == 0)
            sum += i;
    }

    if(sum == n)
        return true;

    return false;
}

void main(){
    int n;

    printf("Nhap vao so nguyen duong n = ");
    scanf("%d", &n);

    bool kiemTra = ktSoHoanChinh(n);
    if(kiemTra == true)
        printf("%d la so hoan hao.\n", n);
    else
        printf("%d khong phai la so hoan hao.\n", n);
}

Nếu như bạn đã hiểu được khái niệm thì đoạn chương trình trên không có gì quá khó hiểu cả. Ta cho một vòng lặp for chạy từ 1 đến n, với mỗi số đi qua, ta kiểm tra xem số đó có phải là ước số của n hay không? Nếu đúng là ước số, cộng ước số đó vào tổng ban đầu, cuối cùng xét xem tổng có bằng số n hay không? Nếu tổng bằng, n chính là số hoàn hảo.

Nếu bạn có gì thắc mắc ở đoạn code ở trên, để lại bình luận bên dưới mình sẽ giúp bạn.

đã bổ sung 6.4 năm trước bởi
Avatar: Tèo Em Tèo Em60
Nha Trang

Số 0 là số hoàn hảo đúng không ạ?

Cộng đồng 24.10.2019

Số 0 không phải là số hoàn hảo, số hoàn hảo nhỏ nhất là 6 (bởi vì 6 = 1 + 2 + 3), nó thoả mãn tính chất của số hoàn hảo là tổng của các ước số dương của chính nó. Xét về điều kiện số có phải là số dương hay không thì số 0 đã không phải rồi.

Cộng đồng 25.10.2019
thêm bình luận...
0
Cộng đồng đã đăng:

Một số được coi là số hoàn hảo trong C++ nếu như tổng các ước nguyên dương chính thức của nó (ngoại trừ nó) bằng chính nó.

Bởi vậy để kiểm tra một số có phải là số hoàn hảo hay không, chúng ta đơn giản chỉ cần tìm ra và tính tổng tất cả các ước số, rồi so sánh xem tổng này có bằng với số đã cho là xong.

Cách kiểm tra số hoàn hảo trong C++, tham khảo tại: Kiểm tra số hoàn hảo trong C++

thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)