30/09/2018, 19:19

Kiểm tra số nguyên tố trong mảng

đây là code số nguyên tố của em mà sao nó không chạy

#include<iostream>
using namespace std;
#define Max 100

void nhapmang(int mang1chieu[Max], int &sopt){
	cout << "
Nhap so phan tu:";
	cin >> sopt;
	for (int i = 0; i < sopt; i++)
	{
		cout << "
Nhap so phan tu thu " << i << ": ";
		cin >> mang1chieu[i];
	}
}

void xuatmang(int mang1chieu[Max], int sopt){
	for (int i = 0; i < sopt; i++)
	{
		cout << "
So phan tu thu " << i << ": " << mang1chieu[i];
	}
}
void KTSN(int mang1chieu[Max], int sopt){
	int dem = 0;
	for (int i = 0; i < sopt; i++)
	{
		for (int n = 1; n < sopt; n++){
			if (mang1chieu[i] % n == 0)
				dem++; 
		}
			if (dem == 2)
				cout << mang1chieu[i] << "la so ngto";
		
	}	
	
}

void main(){
	int mang1chieu[Max], sopt;
	nhapmang(mang1chieu, sopt);
	xuatmang(mang1chieu, sopt);
	KTSN(mang1chieu, sopt);
	system("pause");
}
Trần Hồng Phong viết 21:30 ngày 30/09/2018

Hàm quan trọng nhất là KTSN() bị sai.

  • for (int n = 1; n < sopt; n++) => for (int n = 1; n <= mang1chieu[i]; n++)
  • Biến dem đem vào trong vòng for thứ nhất để nó reset lại

Mình nghĩ bạn nên tách thành 2 hàm Kiểm tra số nguyên tố (1 số) và Kiểm tra số nguyên tố trong mảng. Như vậy sẽ dễ hiểu hơn, và tránh được sai xót

Hồ Minh Chiến viết 21:25 ngày 30/09/2018

bool songto(int n){
if (n < 2) return false;
if ( n == 2) return true;
for (int i = 1; i < (n/2); ++i)
if (n % i == 0) return false;
return true;
}

void KTSN(int mang1chieu[Max], int sopt){
for (int i = 0; i < sopt; i++)
if (songto(mang1chieu[1])
cout << mang1chieu[i] << “la so ngto”;
}

thanh viết 21:34 ngày 30/09/2018

ủa ở dòng 3 trong hàm KTSN hình như thiếu điều kiện của if mà.

thanh viết 21:20 ngày 30/09/2018

em sửa lại thành thế này mà nó vẫn không chạy là sao ạ T.T

#include<iostream>
using namespace std;
#define Max 50
void nhap(int mang1chieu[Max],int &sopt){
	cout << "\nNhap so phan tu:";
	cin >> sopt;
	for (int i = 0; i < sopt; i++)
	{
		cout << "\nNhap phan tu thu " << i<<":";
		cin >> mang1chieu[i];
	}
}
int tong(int mang1chieu[Max],int sopt){
	int lonnhat=mang1chieu[0];
	lonnhat = mang1chieu[0];
	for (int i = 0; i<sopt; i++)
	{
		if (lonnhat<mang1chieu[i])
			lonnhat = mang1chieu[i];

	}
	return lonnhat;
}
bool KTSNT(int n){
	int dem = 0;
	if (n < 2)
		return false;
	for (int i = 1; i < n; i++)
	{
		if (n%i == 0)
			dem++;
	}
	if (dem == 2)
		return true;
	return false;
}

void kiemtraSNT(int mang1chieu[Max],int sopt){
	for (int i = 0; i < sopt; i++)
	{
		KTSNT(mang1chieu[i]);
		if (mang1chieu[i] == true)
			cout << mang1chieu[i]<<" la so nguyen to trong mang."<<endl;
	}
	if (KTSNT == false)
		cout << "\nKhong co so nguyen to trong mang:";
}
void main(){
	int mang1chieu[Max],n;
	nhap(mang1chieu,n);
	cout << "\nSo lon nhat trong mang la:" << tong(mang1chieu,n) << endl;
	kiemtraSNT(mang1chieu, n);
	system("pause");
}

Liêu Đức Mạnh viết 21:29 ngày 30/09/2018

Đầu tiên ở hàm “tong”, bạn viết 1 lúc 2 lệnh giống nhau chi cho dư thừa vậy???
int lonnhat=mang1chieu[0];(1)
lonnhat = mang1chieu[0];(2)

Nếu bạn đã viết số 1 rồi thì không cần viết cái số 2 làm gì nữa.

Thứ 2 ở hàm KTSNT nếu bạn muốn “dem == 2” để xét đk snt thì trong vòng for “i<=n” khi đó n%1 và n%n mới đúng, còn nếu “i<n” như bạn viết thì sẽ sai kết quả.

Thứ 3 ở hàm kiemtraSNT trong vòng for câu lệnh if. mang1chieu[i] là kiểu int, không thể so sánh với kiểu bool được.

KTSNT(mang1chieu[i]);
if (mang1chieu[i] == true)

viết như trên là sai, sửa:

    if(KTSNT(mang1chieu[i])) // Vì hàm KTSNT trả giá trị true false nên nếu true thì if(true) nó sẽ thực hiện câu lệnh luôn, không cần == true chi nữa.
         cout << ...........
Hồ Minh Chiến viết 21:35 ngày 30/09/2018

trong KTSNT
for (int i = 1; i < n; i++)
{
if (n%i == 0)
dem++;
}
if (dem == 2)
return true;
k nên làm vậy. sẽ dài dòng. mình cho nó chạy thẳng từ 2 luôn. nó chia hết cho cái nào thì return false. như vậy sẽ nhanh hơn

X viết 21:32 ngày 30/09/2018

Đã có nhiều bài nói về kiểm tra số nguyên 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…

Bài liên quan
0