Tách Mảng Nguyên Tố : Tách ra 1 mảng khác có những số nguyên tố trong mảng đầu tiên

#include<stdio.h>
    #include<conio.h>
    int Songuyento(int a[],int na)
    {
    	int i,dem=0;
    	for(i=0;i<na;i++)
    	{
    		dem=0;
    		for(int b=1;b<=a[i];b++)
    {
    	if(a[i]%b==0)
    	
    		dem++;
    }
    		if(dem==2)
    			return 1;
    			
    			return 0;
    	}
    }
    void TachMangNguyenTo(int a[],int na,int b[],int &nb)
    {
    nb=0;
    for(int i=0;i<na;i++)
    	{
    	if(Songuyento(a,na)==1)
    		{
    		 b[nb]=a[i];
    		 nb++;
    		}
    	}
    	printf("Mang da tach la: %d %d ",nb,b[nb]);
    }
    int main()
    {
    	int na=5;
    	int a[na]={2,10,6,7,11};
    	int nb;
    	int b[nb];
    	
    	TachMangNguyenTo(a,na,b,nb);
    	getch();
    }

Lỗi của e là ở cái hàm TachNguyenTo cái đoạn b[nb]=10 luôn chứ nó lại k = giá trị của a[i]={2 7 11} mn giúp e xem e sai chỗ nào :3

Mình chưa xem ở trên nhưng thấy chỗ này bạn chưa khởi tạo giá trị cho nb mà lại khai báo mảng với nb phần tử này.

m mới học đến mảng nên kiến thức còn hơi kém, đoạn đấy m nghĩ m khai báo cho hàm main thôi còn khởi tạo giá trị thì m khởi táo giá trị ở trong hàm TachMangNguyenTo vs nb=0 đó b k biết đúng k ?

Sai thêm ở hàm Songuyento nữa, sao lại return 0; chỗ đó.

m tưởng nó nếu trả về giá trị 1 thì đúng là số nguyên tố còn k thì k phải số nguyên tố @Luu_Thanh_Vuong

Vấn đề là nó luôn chỉ kiểm tra a[0] thôi, gặp return là nó thoát khỏi hàm rồi

Vậy phải để thế nào hả b ? Vậy m để break để nó thoát ra khỏi vòng lặp thôi sau đó mới return đc k ?

Mà nhìn code của bạn một hồi cũng rối thật :sweat_smile:. Sao không làm như vậy:

  1. Chỉ viết hàm kiểm tra 1 số có phải là số nguyên tố không thôi int Songuyento(int n)
  2. Ở hàm TachMangNguyenTo thì sửa lại chỗ if(Songuyento(a[i])) => vậy vẫn kiểm tra được hết mảng và vẫn truyền giá trị vào mảng b được.
    Nhớ sửa lại cái b[nb]; + ở chỗ a[na]; đối với 1 số compiler thì cho qua, nhưng không khuyến khích để như vậy, nên truyền vào là một con số.

để về m sửa b k phải viết cái hàm kiểm tra 1 số nguyên tố đâu ^^ hì hì

Vậy thôi. Hàm kiểm tra nguyên tố thì bạn nhớ cái này cho tối ưu code chút:

  • Số <2 không phải là số nguyên tố.
  • Không có số nào chia hết cho n trong khoảng từ 2->căn bậc hai của n.
    => n là số nguyên tố
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?