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

Sign Up

Log In

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("\n 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;
        }
    }

1 Like

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ố

2 Likes

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

1 Like

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.

2 Likes

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

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 :))

1 Like

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

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 !

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

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

Đó 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.

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 ạ ?

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

1 Like

Home
Categories
FAQ/Guidelines
Terms of Service
Privacy Policy


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?