30/09/2018, 20:46

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;		
	}
}

Ngô Doãn Tuấn viết 23:02 ngày 30/09/2018

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?

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

Số nguyên tố: Số nguyên tố là số tự nhiên chỉ chia hết cho 1 và chính nó. Ngoài ra nó không chia hết cho bất cứ số nào khác. Số 0 và 1 không được coi là số nguyên tố. - Theo wiki Số 2 là số nguyên tố chẵn duy nhất. Cấu trúc ở dạng C: int soNguyenTo(int soA) { if (soA < 2) return 0; for (int i = 2; i <= sqrt((float)soA); i ++) { if (soA%i==0) { return 0; } } return 1; } Định nghĩa : Do người dùng tự tạo. Có thể có nhiều…

Nguyễn Thiên Nhã viết 22:49 ngày 30/09/2018

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

Ngô Doãn Tuấn viết 23:01 ngày 30/09/2018

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

Gió viết 22:49 ngày 30/09/2018

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)

Bài liên quan
0