In ra màn hình số lượng số nguyên tố trong đoạn từ a đến b

Nhập vào 2 số a và b (a < b). In ra màn hình số lượng số nguyên tố từ a đến b (trong đoạn a, b).

Ví dụ: a = 2; b = 10 sẽ in ra màn hình số 4. Ví từ 2 đến 10 có các số nguyên tố là 2, 3, 5, 7
mọi người cho em hỏi bài này sai ở đâu ạ

#include <iostream>
using namespace std;
int main()
{
    int N,demnt=0,dem=0,a,b;
    cin>>a>>b;
    for(int N=a;N<=b;N++)
    {
        for(int i=1;i<N;i++)
        {   
            if(N%i==0)
            dem++;
        }   
    if(dem=2)        
        {demnt++;}
    cout<<demnt<<endl;
    return 0;
    }
}

em cảm ơn ạ

2 Likes

Thứ nhất: đặt tên biến khó hiểu. N là gì? demnt là gì? a, b là gì? Mình thật sự không hiểu được ý nghĩa của các biến này.

Thứ hai: = khác với ==.

Thứ ba: indent code chưa đúng, vừa không hiểu biến là gì vừa không hiểu luôn control flow.

2 Likes

mình cam đoan với bạn là sau khi chạy hai cái for này xong, cái biến “dem” hầu như không bao giờ bằng hai. Ví dụ: Với a = 2 và b = 300 chẳng hạn. :smile:

Theo suy nghĩ của mình thì cái dòng

if (dem == 2) 

Của bạn nên đặt trước cái for thứ hai. Tức là code sẽ xem xét giá trị của “dem” trước khi cho for chạy i từ 1 đến N để kiểm tra các số mà N có thể chia hết.
Và i sẽ có giá trị từ i =1 cho đến i <= N.

Bạn từ từ đọc các câu trả lời ở dưới đây và suy nghĩ tiếp nhé :slight_smile:

2 Likes

Sau khi kêt thúc 1 lần lặp của vòng for này

thì bạn vẫn chưa reset lại giá trị của dem, thành ra trong lần duyệt đầu tiên, giả sữ biến đếm mang giá trị là 2 và bạn ko reset lại giá trị cho nó thì sang lần duyệt tiếp theo nếu thỏa điều kiện[quote=“abc123, post:1, topic:36970”]
if(N%i==0)
[/quote]

thì đếm sẽ tăng lên thành 3 và nếu thỏa tiếp giá trị của nó tăng lên là: 4,5,6…

Và trong trường hợp giả sử trong lần duyệt thứ 2 mà N là số nguyên tố thì thằng demnt sẽ không tăng giá trị nữa vì

lúc này điều kiện sẽ không không thỏa vì dem đã lớn hơn 2 rồi :disappointed_relieved:

Chưa kể tình trạng này sẽ còn tiếp diễn trong những lần lặp tiếp theo nữa :sob:

Nhận tiện bạn để [quote=“abc123, post:1, topic:36970”]
return 0;
[/quote]

ở trong vòng for lớn nên nó sẽ bị dính lỗi, vì vậy đặt câu lệnh này ra ngoài đi :grin:

1 Like

A post was merged into an existing topic: Topic lưu trữ các post off-topic - version 3

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