Tìm số nguyên tố lớn nhất trong mảng?

vấn đề là code như vầy thì nó chỉ tìm đc mỗi số 2 thôi! Không biết là sai chỗ nào nữa… nhờ m.n giúp đỡ chút ạ. cảm ơn m.n nhiều!!!

nếu dnt khác không thì return về số nguyên tố max, còn bằng không thì không có số nguyên tố nào.

tức là bạn tìm ra các số nguyen tố sau đó tìm max phải ko ?
mình ko hiểu ý bạn ở đoạn

if(kp==0) thì nó không là số nguyên tố chứ?
mà nếu bạn muốn lấy cái đó làm dấu hiệu nhận biết snt thì phải break ngay khi tìm được 1 cái j thỏa mãn a[i]%j==0 chư ???

1 Like

gắn cho kp=0 khi kêt thúc vòng for j OK

mình cho kp đếm hết vòng for của j để biết số a[i] chia hết cho mấy số… nếu chỉ 1 số là chính nó ấy. thì là kp=1 là số nguyên tố, rồi mình xét max.

đãng trí quá. chưa trả về để xét số a[i] tiếp theo. tks bác nhé.

#include <stdio.h>
#include <math.h>

bool isNguyenTo(int n);

int main()
{
    int a[] = {7, 3, 10, 2, 21, 23, 1, 4};
    int dem=0, max_=0;

    for(int i=0; i<(sizeof(a)/4); i++)
    {
        if(isNguyenTo(a[i]))
        {
            if(a[i] > max_)
                max_ = a[i];
            dem++;
        }
    }
    printf("so nguyen lon nhat la %d\n", max_);
    printf("So nguyen to co trong mang la %d\n", dem);
}

bool isNguyenTo(int n)
{
    if(n < 2) //nhớ nhé số 2 là số nguyên tố chẵn duy nhất
        return false;
    for(int i=2; i<=sqrt(n); i++)
    {
        if(n%i==0)
            return false;
    }
    return true;
}

Mình làm gì đây nè bạn tham khảo thử:grinning:, chứ thấy bạn làm rối quá:grin:

1 Like

Tách hàm ra xử lý đi bạn,code thế này nhìn rối rắm lắm !

cảm ơn mọi người rất nhiều… mình đang làm theo cách cơ bản nhất thôi mà quên trả đếm về để xét số a[i] kế tiếp nên sai. bây giờ thì ổn rồi. tks m.n nhé

tks… tại mình đang làm theo cách cơ bản nhất và do mình làm quá nhiều hàm phức tạp r nên cho nó vào 1 chỗ r hành sự luôn. hehe

#include<stdio.h>

// Ham nhap mang 
void nhap_mang(int a[], int n)
{
	int i;
	for(i=1;i<=n;i++)
	{
		printf("\na[%d]=",i);
		scanf("%d",&a[i]);
	}
}

// Ham xuat mang
void xuat_mang(int a[],int n)
{
	int i;
	for(i=1;i<=n;i++)
	    printf("%5d",a[i]);
}

//Ham kiem tra so nguyen to
int ktsnt(int so)
{
	int i,dem=0;
	for(i=1;i<=so;i++)
if(so%i==0)
   dem+=1;

if(dem==2)
return 1;
else
return 0;
}

//Ham tim max nguyen to
int max_nt(int a[],int n)
{
	int i,maxnt=0;
// Tim so nguyen to dau tien va gan = maxnt	
	for(i=1;i<=n;i++)

if(ktsnt(a[i])==1)
{
maxnt=a[i];
break;
}
// so sanh cac so nguyen to voi maxnt
for(i=1;i<=n;i++)
if(ktsnt(a[i])==1&&a[i]>maxnt)
maxnt=a[i];
return maxnt;

}

main()
{
	int a[50],n;
	
	do
	{
		printf("\nNhap so phan tu cua mang ");scanf("%d",&n);
	}
	while(n<0||n>50);
	nhap_mang(a,n);
	printf("\nDay so vua nhap la: \n");
	xuat_mang(a,n);
	if(max_nt(a,n)!=0)

printf("\nSo nguyen to lon nhat la: %d\n",max_nt(a,n));
else
printf("\nDay ko co so nguyen to\n");
}

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?