Code xuất các số nguyên tố có trong mảng bị sai

Xuất ra các số nguyên tố có trong mảng, yêu cầu:

  • Theo thứ tự tăng dần
  • Chỉ in ra 1 lần cho dù số nguyên tố đó xuất hiện nhiều hơn 1 lần
  • Các số nguyên tố cách nhau bằng 1 dấu cách.

sai ở đâu v ạ

#include <bits/stdc++.h>
using namespace std;
int n,a[10011],res[1011];
int dem=0;
bool cx[1011];
int main(){
	cin>>n;
	for (int i=1;i<=n;i++) cin>>a[i];
	for (int i=1;i<=n;i++) {
		for (int j=i+1;j=n;j++) {
			if (a[i]>a[j]) swap (a[i], a[j]);
		}
	}
	int cnt=0;
	for (int i=1;i<=n;i++) {
		if (cx[i]==true) {
			cnt++;
			res[cnt]=a[i];
			for (int j=i+1;j<=n;j++) {
				if (a[i]==a[j]) {
					cx[j]=false;
				}
			}
		}
	}
	for (int i=1;i<=n;i++) {
		int x=res[i];
		if (x<2) dem++;
		else {
			for (int j=2;j<=sqrt(x);j++) {
				if (x%j==0) dem++;
			}
		}
	}
	if(dem==0) cout<<dem<<" ";
	return 0;
}

mình cũng mới tập code , đây là bài mình làm , có j k ổn ns mình nha
I’m a newbie @.@

#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
bool nguyento(int n)
{
    if (n<=1) return false;
    for (int i=2;i<=sqrt(n);i++)
        if (n%i==0) return false;
    return true;
}
int main()
{
    vector<int> a;
    int n;
    cout<<"Nhập số phần tử trong mảng :  ";cin>>n;
    for (int i=0,j;i<n;i++)
    {
        cout<<"a["<<i+1<<"]:";cin>>j;
        a.emplace_back(j);
    }
    sort(a.begin(),a.end());
    a.erase(unique(a.begin(),a.end()),a.end());
    cout<<"Các số nguyên tố theo yêu cầu : ";
    for (int i : a) if (nguyento(i)) cout<<i<<" ";
}

nếu như thấy dư thư viện thì có thể xóa #include <algorithm> rồi sort bằng bubbleSort

Mình chưa xem chi tiết, nhưng sơ qua thì thấy:

  1. Mảng cx bạn chưa hề gán giá trị cho từng phẩn tử trước đó, nhưng vào vòng lặp bạn đã dùng nó để so sánh (if (cx[i]==true)). Ổn không?
  2. Nên tách đoạn mã kiểm tra số nguyên tố ra 1 hàm riêng. Mình thấy có vấn đề với biến dem khi chả thấy bạn gán lại bằng 0 sau mỗi lần lặp.

Ý tưởng thì bạn có thể tham khảo đoạn mã của @caophi562005, nhưng hiện bạn ấy đang dùng rất nhiều lớp/phương thức có sẵn.

  1. Sắp xếp tăng dần
  2. Loại bỏ phần tử trùng. Nhưng thực sự chả cần làm vậy.
  3. Duyệt lần lượt và in ra nếu là số nguyên tố. Nếu bỏ bước 2 thì chỉ cần 1 biến tạm để lưu số đã in ra trước đó, nếu đã in ra thì không in nữa.1
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?