Cho trước mảng A, số lượng phần tử n. Tách các số nguyên tố có trong mảng A vào mảng B

moi người cho e hỏi tại sao khi chạy chương trình lại ko xuất ra kết quả ạ

#include<stdio.h>
int snt(int n)
{
	int d,i;
	for(i =1;i<=n;i++)
	{
		if(n%i==0)
			d=d+1;
	}
	if(d==2)
		return 1;
	else
		return 0;
}
void main()
{
	int n,i,A[100],B[100];
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&A[i]);
	int nB=0;
	for(i=0;i<n;i++)
	{
		if(snt(A[i])==1)
		{
			B[nB]=A[i];
			nB++;	
		}
	}
	for(i=0;i<nB;i++)
		printf("%d",B[i]);
}

Vì nó chẳng tách được số nguyên tố nào ra cả:

  • Chưa gán giá trị khởi tạo d => chưa chắc d = 0 đâu.
  • Hàm snt viết vòng lặp for khá dư thừa. Nên cho i chạy từ 2 đến n/2 là đủ.
1 Like

sqrt(n) luôn :smiley: là đủ. Vì hai thừa số a, b (với n = a*b) luôn nằm ở “hai bên” của sqrt(n), hay a <= sqrt(n) <= b.

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