30/09/2018, 21:42

Liệt kê n số nguyên tố đầu tiên!

#include<stdio.h>
#include<conio.h>
main()
{
int i,a,dem=0,demc=0,n,b,z;
printf("Nhap so n la:"); 
scanf("%d",&n);
printf("Nhap so a la:");
scanf("%d",&a); 
for(i=2;i<=a;i++)
{
dem=0;

for(b=1;b<=a;b++)

if(i%b==0)


dem++;

if(dem==2)
{
z=i;	

}
if(demc<=n)
{

printf("%d ",z);
} 
}
getch();
}

Mọi người xem mình bị lỗi gì ? kiến thức còn kém k biết sai chỗ nào. Khi mình chạy thì nó bị lỗi như sau: VD: n=4; a=10 KQ: 2 3 3 5 5 7 7 7 7 đáng nhẽ phải ra 2 3 5 7 chứ :))~ :))~

Do Quang Duy viết 23:58 ngày 30/09/2018

Code bạn chỗ này hơi rối, và mình không hiểu ý tưởng lắm:

if(dem==2)
{
z=i;	

}
if(demc<=n)
{

printf("%d ",z);
} 

Mình có sửa qua một chút, ý tưởng của bạn thì vẫn giữ nguyên không thay đổi, mình chỉ comment cho dễ hiểu:

#include<stdio.h>
#include<conio.h>
int main()
{
	int i, a, dem = 0, demc = 0, n, b, z; 
	printf( "Nhap so n la:" ); // n la so luong so nguyen to can lke
	scanf( "%d" , &n );
	printf( "Nhap so a la:" ); // [0, a] la tap so tu nhien chua n so nguyen to
	scanf( "%d", &a ); 
	for( i=2; i <= a; i++ )
	{
		dem = 0;
		for( b=1; b<=a; b++)
			if( i % b == 0)
				dem++;

		if( dem == 2 ) // neu i la so nguyen to 
		{
			printf( "%3d", i ); // in ra i
			demc++; // so luong so nguyen to tang len 1
		}
		
		if ( demc == n ) // neu da du n so nguyen to thi thoat vong lap
			break;
	}
	getch();
}

Nhưng cách này chưa tối ưu vì giá trị a nhập vào mình không biết là bao nhiêu để bao hàm n số nguyên tố đầu tiên cả, việc tối ưu dành lại cho bạn nhá

"Master yourself, Master the Enemy" viết 23:43 ngày 30/09/2018

ý mình là thế này khi mà giá trị dem==2 tức là đã chọn được 1 số nguyên tố mình cần lưu nó bằng 1 biến đếm khác ở đây là biến demc sau đó thì m cần những biến demc đó<n rồi in nó ra ý m là như thế mong các b chỉ giáo ^^ trình độ còn hơi kém keke

"Master yourself, Master the Enemy" viết 23:49 ngày 30/09/2018

cám ơn b QuangduyT nhé b code dễ hiểu lắm m hiểu r kekek :v

Bài liên quan
0