Code in ra N số nguyên tố đầu tiên bị lặp vô hạn

Đề bài:

Viết chương trình C nhập vào số nguyên dương N, xuất ra màn hình N số nguyên tố đầu tiên. (Ví dụ N=5, xuất ra màn hình 2 3 5 7 11)

mình không biết bị sai lỗi gì, mà chạy chương trình thì nó chạy liên tục luôn, có ai giúp mình ko?

int main() {
    int N;
    printf("Nhap N:");
    scanf("%d", & N);
    if (N <= 0) {
        printf("moi nhap so lon hon 0:");
    } else {
        for (int i = 2; i > 0; i++) {
            int t = 0;
            for (int j = 1; j <= i; j++) {
                if ((i % j) == 0)
                    t++;
            }
            {
                if (t == 2)
                    for (int k = 1; k <= N; k++)
                        printf("%d\t", i);
            }
        }
    }
    return 0;
}

Ôi! Nhìn ngứa cả mắt!

4 Likes

xin lỗi mình mới học, không viết chuyên nghiệp được bạn

Vòng for sẽ lặp vô hạn. Kiem tra lại đk i

3 Likes

à, tại mình chưa nghĩ ra cái nào mà có thể khiến i hoạt động được khi thiếu đk đó

Bạn muốn khi nào thì vòng for sẽ dừng?

Và lệnh này để làm gì? Sao lại cần nó?

Mình sửa bài của bạn nhé.
Tự so sánh 2 bài xem khác nhau chỗ nào rồi tìm ra lỗi sai.

#include <stdio.h>
int main() {
    int n;
    do {
    	printf("Nhap n:\n");
    	scanf("%d",&n);
    	if (n<=0)
    		 printf("moi nhap so lon hon 0:");
    }
    while (n<= 0);
    printf("%d số nguyên tố đầu tiên:\n",n);
    int k=1;
    for (int i = 2;; i++) {
    	if (k>n)
    		break;
    	int t = 0;
       for (int j = 1; j <= i; j++)
       	if ((i % j) == 0)
          	t++;
       if (t == 2)
       	{
          	printf("%d\t", i);
          	k++;
          }
     }
    return 0;
}
1 Like

Cảm ơn bạn, mình sửa được rồi.

mình đã sai trong lập luận logic, cảm ơn bạn đã giải thích

trên DNH có rất nhiều bài toán dạng in số nguyên tố rồi. in k số nguyên tố phía trước / sau n.
code rất ngắn gọn, tường minh.
Có cả sử dụng function, bạn có thể tham khảo thêm.

1 Like

Nếu sửa cái này thành for (i = 2; i < n; i++) bạn sẽ bớt được 1 biến k;
Nếu bước nhảy của i là 2 (i lẻ) bạn sẽ bớt được 1 nửa vòng lặp

for (j = 2; j * j < i; j++)
Bạn sẽ bớt được sqrt(i) - 2 lần vòng lặp.
Bạn còn có thể phát triển nó nhiều lắm

Cái này là in ra những số nguyên tố bé hơn n mà.
Đề bài yêu cầu in ra n số nguyên tố đầu tiên.
Bác thông não giúp em với :frowning:

2 Likes

Tôi xl, tôi đọc k kỹ rồi. Xl

1 Like

Dùng sàng bay vèo vèo luôn :smiley:

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