01/10/2018, 09:20

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 ạ

Nguyễn Khanh viết 11:31 ngày 01/10/2018

Nguyễn Khanh viết 11:34 ngày 01/10/2018

Khoa NTA viết 11:24 ngày 01/10/2018

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à.

rogp10 viết 11:33 ngày 01/10/2018

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 đó 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

Nguyễn Khanh viết 11:36 ngày 01/10/2018

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ố

Nguyễn Khanh viết 11:27 ngày 01/10/2018

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

Đỗ Trung Quân viết 11:24 ngày 01/10/2018

bởi vì phải kiểm tra xong một số rồi mới xét cộng được hay không.

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

do đó là thuật toá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;
Quang Minh viết 11:26 ngày 01/10/2018

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

Bài liên quan
0