30/09/2018, 19:01

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!!!

nguyen thanh tam viết 21:17 ngày 30/09/2018

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.

Trần Tuấn An viết 21:16 ngày 30/09/2018

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ư ???

Tuan Tran Duong viết 21:05 ngày 30/09/2018

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

nguyen thanh tam viết 21:14 ngày 30/09/2018

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.

nguyen thanh tam viết 21:13 ngày 30/09/2018

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

Interns viết 21:03 ngày 30/09/2018
#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:

Nguyễn Anh Dũng viết 21:18 ngày 30/09/2018

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

nguyen thanh tam viết 21:13 ngày 30/09/2018

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é

nguyen thanh tam viết 21:17 ngày 30/09/2018

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

Thức Thư Sinh viết 21:11 ngày 30/09/2018
#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");
}

Bài liên quan
0