Đếm số nguyên tố trong mảng

Cậu cảm giác gì không quan trọng. Đây là ngành kỹ thuật, yêu cầu sự chính xác :smile:
Bắt đầu lại nhé! Cậu đang gặp vấn đề gì? Cậu có cách nào tái hiện vấn đề đó không?

2 Likes
int dem = 0; 
bool laSNT = false; 
for (int i = 0; i < n; ){ 
     for (int j = 2; j <= sqrt(a[i]); j++){ 
         if (a[i] % j == 0){ 
            laSNT = false; 
            break; 
         } 
         if (laSNT = true)
             dem++;
             cout << a[i] << " "; 
             }
             i++; 
             laSNT = 0; 
          } 
cout << "So nguyen to xuat hien: " << dem;
}

lấy bài này làm ví dụ đi, mình thấy lỗi sai của mình ở chỗ đã xác định được trong code đoạn

for (int j = 2; j <= sqrt(a[i]); j++){ 
         if (a[i] % j == 0){ 
            laSNT = false; 
            break; 
         } 
         if (laSNT = true)
             dem++;
             cout << a[i] << " "; 
             }

trong for (int j; …; …) thì đoạn đếm không nằm trong vòng lặp này, nó chỉ thực thi khi j chạy tới sqrt(a[i]) && laSNT == true. Nếu dựa theo đoạn code sai này thì mỗi khi điều kiện a[i] % j != 0 thì nó cứ đếm 1 lần, mãi tới điều kiện sai của vòng lặp for j. Nên biến đếm bị tăng lên cho cùng 1 a[i].
lỗi sai thứ 2 là trong phần

 if (laSNT = true)
             dem++;
             cout << a[i] << " "; 
             }

nếu để “=” nghĩa là mình gán laSNT thành true, trong khi ý nghĩ ban đầu của mình là nếu laSNT đúng dựa trên điều kiện ở phía trên thì dem++ mới được thực thi

mình thấy chỉ cần viết, tới từng đoạn cho chạy nếu chương trình compile được và thực thi ra kết quả đúng thì đoạn đó chắc chắn đúng, ví dụ như đoạn nhập khai báo mảng, nhập phần tử vào mảng, đoạn đó xong là cho chạy 1 lần, chạy đúng mới viết tiếp đoạn sau.
còn 1 cách nữa là mình so đoạn code với flowchart mình đã vẽ ra :thinking: :thinking: :thinking: nhưng nói chung cách này mình chưa quen, kiểu thấy viết xong rồi so lại k thấy nó đi theo flowchart. Đợi tới lúc viết đúng ra kết quả đúng rồi thì so lại mới thấy nó chạy theo flowchart :sweat_smile:

Bạn có debug từng dòng chưa ?

1 Like
for (int i = 0; i < MAX; i++)							// CAU CHUYEN TINH YEU (bat dau chua co' con nha!!!)
{
	if (arr[i] > 2)										// Song gio cuoc doi`
	{
		bool check = true;								// Tinh yeu VAN CO`N do'
		/* 
			Tai sao khong phai la bat dau tu 3 ma la 2 ?? hehe, 
			Tinh can bac hai cua 3, 4 rui se hieu 
			Boi vi 'j' la uoc so do' ma`
		*/
		for (int j = 2; j <= sqrt(arr[i]); j++)			// Vong lap kiem tra tinh yeu di'ch thuc
		{												
			if (arr[i] % j == 0)						// AAAAA thang co` ho' nay co' con rieng. chia tay lien`
			{
				check = false;							// Sau chia tay, kiem' nguoi yeu moi' vao` check tiep'
				break;									// Quen di nguoi yeu cu~, chuan bi quen nguoi` moi'
			}
		}
		if (check)										// Neu' van con yeu nhau
			count++;									// Sinh con
	}
	else if (arr[i] == 2)								// Tieng set ai tinh`				
		count++;										// Nhin` phat' co' con luon, khoi kiem tra hang`

Mình góp vui một tý ạ :grinning: :grinning:

3 Likes

Sorry, tớ đang bị confuse.
Tớ thấy ở đây có rất nhiều đoạn code, vậy đoạn code nào là đoạn code mới nhất của cậu? Vì có vẻ cậu lấy lại đoạn code từ đầu, vốn đã được chỉnh sửa rồi.
Chúng ta sẽ thảo luận trên đó, vì thảo luận về những vấn đề đã được giải quyết sẽ mất thời gian của tất cả. Đừng làm vậy!

Tớ hỏi lại lần cuối nhé, với code mới nhất của cậu, cậu gặp vấn đề gì vậy? :neutral_face:

3 Likes

mình chưa được dạy vụ debug bạn ơi @@ bữa cũng bấm thử nhưng k biết dùng @SuperFrankie8

code mới nhất thì mình làm ra rồi, chẳng qua bạn bảo mình tái hiện lại vấn đề nên mới lôi đoạn code từ ban đầu để đào lỗi ấy :laughing: :joy:

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