Vấn đề về số nguyên tố

http://codepad.org/tkbNUjxU

em gặp vấn đề với đề bài xuất ra các số nguyên tố có trong mãng: đúng hết với mọi trường hợp nhưng duy nhât trường hợp 2 và 3 thì sai( vì thuật toán em chạy từ g đến căn bậc 2 số muốn xét, nhưng mà 2 và 3 khai căn thì không lớn hơn g nên code dưới k chạy)

làm sao để khắc phục ạ

Bởi vì có ngoại lệ nên bạn chỉ cần thêm 2 trường hợp kiểm tra xem phải là 2 và 3 là xong rồi. Topic về số nguyên tố này đã có rất nhiều người tạo rồi bạn. Bạn có thể dùng tính năng search mà. :smile:

Viết hàm kiểm tra ntn 2 và 3 vẫn nhận tốt (lí do là (int)sqrt(2) < 2), do bạn viết sai đó :slight_smile: bởi vì phải kiểm tra xong một số rồi mới xét cộng được hay không.

Mà đừng quên 1 với 0 :slight_smile:

Thật ra là thuật toán bị sai ?a có thể giúp em sữa lại được ko? ví dụ em nhập số 9 thì nó lại ra là số nguyên tố

sao 2 và 3 nhận vẫn tốt anh. 2 và 3 ko chạy được mà k chạy được thì nó đâu vào biến tổng đâu ạ. thêm nữa là số 9… sai, do đó là thuật toán sai(khi nào anh rãnh có thể giúp em sữa lại thuật toán được k ạ)

Bạn ý có kiểm tra, nhưng điều kiện sai

Còn điều kiện if của em sai vì sao, anh nghĩ em nên tự tìm hiểu.
Còn đây là cách sửa khi không cần viết thêm 1 hàm khác để check

	for (int i = 0; i < dong; i++)
	{
		for (int j = 0; j < cot; j++)
		{
			int temp = a[i][j];
			for (int g=2;g<=sqrt(temp);g++)
			{
				if (temp % g ==0) // nếu chia hết thì không phải số nguyên tố
				{
					a[i][j] = 0; // gán tất cả các số chia hết bằng 0
				}
			}
            if (a[i][j]  < 2) 
		    {
				a[i][j] = 0; 
			}
            tong += a[i][j]; // cộng tổng các số trong mảng khác không
		}
	}
	cout << "tong cac so nguyen to co trong ma tran la " << tong << endl;
	return tong;

số 1 không phải số nguyên tố nhé :smile:

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