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");
}
Bài liên quan
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++)
dem
đem vào trong vòng for thứ nhất để nó reset lạiMì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
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”;
}
ủa ở dòng 3 trong hàm KTSN hình như thiếu điều kiện của if mà.
em sửa lại thành thế này mà nó vẫn không chạy là sao ạ T.T
Đầ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:
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
Đã có nhiều bài nói về kiểm tra số nguyên tố