Code đếm số lượng phần tử là số nguyên tố phân biệt không in ra kết quả

Mọi người cho em hỏi vì sao code này nó không ra gì hết ạ ;(. Em cảm ơn

#include <iostream> 
using namespace std; 
void nhap (int a[100],int &sl) { 
    cout << "\n nhap so luong phan tu "; 
    cin >> sl; 
    for ( int i = 0; i < sl; i++) {
        cout << "\n a["<<i<<"]= "; 
        cin >> a[i]; 
    } 
} 
bool kiemtrasonguyento (bool n) { 
 n = false;
 int g=0;  
  for ( int i = 1 ; i<=n;i++) { 
     if (n%i==0) g++; 
  }
  if (g==2) n=true; 
  return n; 
 }
void sapxeptangdan (int a[100],int sl) { 
   for ( int i = 0;i<sl;i++) { 
    for ( int j = 0;j<i;j++) { 
       if ( a[i] < a[j]) swap (a[i],a[j]); 
	}
   }                                                   
}
int giongnhau(int a[100],int sl, int &m, int b[100]) { 
m = 0; 
for (int i = 0; i<sl;i++) { 
   if (kiemtrasonguyento(a[i])==true) {
   if ( a[i]==a[i+1]) continue; 
   else m++;
}
}
cout << "\n co "<<m<<" so nguyen to phan biet"; 
} 


int main () { 
 int a[100], sl,dem;
 int m; 
 int b[100]; 
 nhap (a,sl); 
 sapxeptangdan(a,sl); 
 giongnhau (a,sl,m,b);
 
 return 0; 
}
  • Lỗi truy xuất phần tử. Với i = sl - 1 thì i + 1 = sl mà lại đi truy xuất a[i+ 1].
  • Đây là hàm kiemtrasonguyento : bool kiemtrasonguyento (bool n)
    Đây là lời gọi hàm : kiemtrasonguyento(a[i])
    => n = a[i]
    Nhưng vào trong lại gán n = false :thinking:. Thế gán n = false thì n sẽ chứa giá trị là bao nhiêu nhỉ :thinking:

Góp ý chút :

  • Sai quy tắc đặt tên biến và hàm kìa.
  • Kiểm tra số nguyên tố thì chỉ cần duyệt đến sqrt(n) thôi.
4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?