Lỗi khi chạy chuong trình

Mọi người cho em hỏi chương trình dùng hàm in ra các sô nguyên tố từ 2 đến 2000. Nhưng khi chạy thì số nguyên tố đầu tiên trở đi là 11. Cho từ 2 đến 50 hay đến số nhỏ hơn 2000 thì cho ra kết quả đúng?

 #include <iostream>
using namespace std;
//Ham kiem tra mot so co la so nguyen to khonh
//Ham nhan vao mot so nguyen > 0
//Ham tra ve true neu so la so nguyen to, false neu khong la so nguyen to

bool laNguyento (int n)
{
	bool ketqua = true;
	if ( n < 2 )
		ketqua = false;
	if ( n >= 2 )
	{
		for ( int i = 2; i <= sqrt(n*1.0); i++ )
		{
			if ( n % i == 0 )
				ketqua = false;
		}
	}
	return ketqua;
}

int main()
{
	cout << "Cac so nguyen to tu 2 den 2000 la: " << endl;
	for ( unsigned  int i = 2; i <= 2000; i++ )
	{
		if ( laNguyento(i) )
			cout << " " << i << endl;		
	}
}

Mình test vẫn ra bình thường mà nhỉ ?
Trong vòng for kiểm tra số nguyên tố thì bạn nên thêm

if ( n % i == 0 )
				ketqua = false;
				break;

Mà hàm kiểm tra số nguyên tố của bạn đã đúng chưa nhỉ ?
Mình nhìn thấy một vài số không hợp lý lắm ?
ví dụ 1995
Bạn có thể tham khảo bài viết

ôi Bác ơi em chạy đâu có số 1995.

1 Like

Ủa vậy hả :sweat_smile:
Vậy bạn tham khảo thêm bài trên nhé :smiley:

Muốn hạn chế sai sót, hãy hạn chế dùng số thực.
Không phải lúc nào cũng sqrt(n)*sqrt(n)==n. Dùng i*i<=n thay thế cho i<=sqrt(n)

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