Nhập số nguyên dương n in ra màn hình các số hoàn hảo nhỏ hơn hoặc bằng n

Yêu cầu:

Một số hoàn hảo là một số có tổng các ước số của nó bằng chính số đó. Hãy tìm số hoàn hảo nhỏ hơn 5000. Ví dụ: 6 có các ước số là 1, 2, 3 và 6 = 1 + 2 + 3.

Thuật toán:

– Tìm các ước số của số đó. Sau đó tính tổng các ước số.

– So sánh tổng các ước số với số đó. In kết quả ra màn hình.

Code:

/************************************************************ * Author: VNCODING * History * 2014/03/17 first create VNCODING *************************************************************/ #include "stdio.h" #include "conio.h" void main() { int N; int i, j, sum; do { printf("\n Nhap vao so N = "); scanf("%d", &N); } while(N <= 0); for(i = 2; i <= N; i++) { sum = 1; for(j = 2; j <= i/2; j++) { if(i%j == 0) sum += j; } if(sum == i) printf("\n %d", i); } getch(); }

Kết quả:

Nhap vao so N = 5000 6 28 496

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.

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

  • Đầu tiên ta tìm các ước số thật sự của số a
  • Ta dùng một biến sum tính tổng các ước số thật sự của a
  • Kiểm tra nếu sum == a  thì a chính là số hoàn hảo
  • Lưu ý: các ước số thật sự của a luôn bé hơn hoặc bằng a/2. Các bạn dùng điều kiện này để giới hạn vòng for lại.

Code C

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#include<stdio.h>

bool check(int n){

    int sum = 0;//khai bao biem sum

    for(int i=1;i<=n/2;i++){

        if(n%i==0)

            sum+=i;

    }

    if(sum==n) return true; // tra ve true

    return false;

}

int main(){

    int n;

    printf("Nhap n: ");

    scanf("%d",&n);

    if(check(n) )

        printf("%d la so hoan hao.",n);

    else

        printf("%d khong phai la so hoan hao.",n);

    return 0;

}

Kết quả sau khi chạy

Nhap n: 6

6 la so hoan hao.

Code C++

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#include<iostream>

using namespace std;

bool check(int n){

    int sum = 0;//khai bao biem sum

    for(int i=1;i<=n/2;i++){

        if(n%i==0)

            sum+=i;

    }

    if(sum==n) return true; // tra ve true

    return false;

}

int main(){

    int n;

    cout<<"Nhap n: ";

    cin>>n;

    if(check(n) )

        cout<<n<<" la so hoan hao.";

    else

        cout<<n<<" khong la so hoan hao.";

    return 0;

}

Kết quả sau khi chạy

Nhap n: 12

12 khong la so hoan hao.

Bài viết mình đến đây là kết thúc. Cám ơn các bạn đã theo dõi !