30/09/2018, 22:17

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

Khánh Nguyễn viết 00:23 ngày 01/10/2018

int nb;
int b[nb];

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.

Đức Nguyễn viết 00:30 ngày 01/10/2018

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 ?

Lưu Thành Vương viết 00:26 ngày 01/10/2018

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

Đức Nguyễn viết 00:29 ngày 01/10/2018

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

Lưu Thành Vương viết 00:27 ngày 01/10/2018

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

Đức Nguyễn viết 00:18 ngày 01/10/2018

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 ?

Lưu Thành Vương viết 00:31 ngày 01/10/2018

Mà nhìn code của bạn một hồi cũng rối thật . 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ố.
Đức Nguyễn viết 00:29 ngày 01/10/2018

để 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ì

Lưu Thành Vương viết 00:25 ngày 01/10/2018

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ố
Bài liên quan
0