30/09/2018, 21:13

Thắc mắc về bài tập liệt kê số nguyên tố nhỏ hơn n trong C

đây là bài tập C của e ạ, bài yêu cầu liệt kê tất cả các số nguyên tố nhỏ hơn một số N nhập vào từ bàn phím, đây là bài trên mạng, nhưng e vẫn chưa hiểu tại sao dem phải gán giá trị bằng 2 thì máy mới liệt kê đúng các số nguyên tố. Nếu e bỏ đoạn “dem==2” đi thì chương trình liệt kê toàn bộ các số trước N ra. E vẫn ko hiểu ạ ? Mong đc a chị giải đáp, em cảm ơn!

    #include <stdio.h>
    main()
    {
        int n,i,j,dem=0;
        printf("
 Nhap n: ");
        scanf("%d", &n);
        for (i=2;i<=n;i++)
        {
            for (j=1;j<=i;j++)
            {
                if(i%j==0)
                    dem++;
            }
            if(dem==2)
                printf("%d, ",i);
            dem=0;
        }
    }
Tống Văn Hải viết 23:26 ngày 30/09/2018

Bạn phải hiểu được một số nguyên tố là số như thế nào: Là số lớn hơn 1 và chỉ chia hết cho 1 và chính nó, tức chỉ có 2 ước.
Biến “dem” ở đây biểu thị cho số ước tìm được của số đang được biến i duyệt đến (trong khoảng từ 1 -> n)
=> dem == 2 thì số đó là số nguyên tố, bien != 2 thì ko phải số nguyên tố

viết 23:17 ngày 30/09/2018

cách đặt tên biến số tuyệt vời “dem” ko biết là đếm cái gì

Đỗ Thắng viết 23:17 ngày 30/09/2018

bạn phải hiểu là số nguyên tố là số chia hết cho 1 và chính nó. khi ban đầu thì dem=0, sau khi chia hết cho 1 thì dem được cộng thêm 1 tức dem=1, sau khi chia hết cho chính nó thì dem cộng thêm môt nữa tức là dem=2, khi mà nó chia hết cho một hoặc nhiều số khác thì đếm đương nhiên sẽ lớn hơn 2, vậy nên t kết luận dem phải bằng 2 thì vì là số nguyên tố và in ra số đó. Hy vọng bạn hiểu.

Thừa An Đặng viết 23:28 ngày 30/09/2018

em hiểu rôi, cảm ơn mọi người rất nhiều ạ

Jack Master viết 23:28 ngày 30/09/2018

dem ở đây là ước, số nguyên tố là số chỉ chia hết cho 1 và chính nó nên ước của nó chỉ bằng 2. Nếu số nào có ước lớn hơn 2 thì nó sẽ không phải là số nguyên tố. còn số nào có ước = 2 thì nó sẽ là số nguyên tố. Khi i%j==0 dem++ thì nó đang tính số ước của i. Khi i chia hết cho j thì dem sẽ tăng 1. Nếu bỏ dem==2 thì nó sẽ in ra i->n theo vòng lập trên rồi :))

Tao Không Ngu. viết 23:16 ngày 30/09/2018

This post was flagged by the community and is temporarily hidden.

Minh Hà viết 23:26 ngày 30/09/2018

Mn cho em dòng code dem=0; ở cuối có tác dụng như thế nào ạ? Nếu bỏ đi thì chương trình ko chạy được. Tks !

HK boy viết 23:27 ngày 30/09/2018

k = 0 ở đâu hả bạn? Bạn có code không?

Minh Hà viết 23:14 ngày 30/09/2018

e nhầm, đoạn code dem=0 ý ạ

HK boy viết 23:18 ngày 30/09/2018

Đó là biến đếm số ước của số i. Mỗi lần xem xét 1 số i mới, ta cần phải khởi tạo lại biến đếm.

Minh Hà viết 23:19 ngày 30/09/2018

theo e hiểu thì với số i khác thì dem sẽ đếm lại từ 0, nếu =2 thì cho ra số nguyên tố, rồi xét i tiếp theo và dem sẽ lại về giá trị 0 đúng ko ạ ?

HK boy viết 23:13 ngày 30/09/2018

Bạn hiểu đúng rồi đó.

Bài liên quan
0