2016-06-28 10 views
0

以下は、nを入力してnまで素数を印刷するようにユーザーに依頼するために書いたコードです。私は取得しています 出力は、プログラムが3を超えてループに入ると、出力が表示されていないだけで3までです:あなたは候補者が素数であれば教えてflagを使用している1 2 3prime no.sからnまで印刷するCプログラム

#include <stdio.h> 
void main() 
{ 
     int a, i, j, flag = 0; 
     printf("Enter n?\n"); 
     scanf("%d",&a); 
     printf("Prime no.s till %d are: ",a); 
     for(i=1; i<=a; i++) 
     { 
       for(j=2; j<=i/2; j++) 
       { 
         if(i%j==0) 
         { 
           flag=1; 
           break; 
         } 
       } 
       if(flag==0) 
         printf("%d ",i); 
     } 
     printf("\n"); 
} 
+1

1は素数でないです。 –

+0

'flag'を' 0'にリセットすることはありません。 –

+0

あなたは偶数になるたびにループを中断しているので、過去4になることは決してありません。 – user3814613

答えて

2

かない。しかし、プログラムの初めにそれを初期化するので、非プライムを見つけるとすぐに、その後の候補もすべて非プライムとみなされます。

iを変更するたびにflagを再初期化する必要があります。

+0

はい私はそれを得ました。ありがとう! – chayan

2

2つの間違いがあります。最初に1は素数ではないので、2でループを開始してください。

第二に、あなたは最初のループ

for(i=2; i<=a; i++) 
    { 
    flag=0; 
    for(j=2; j<=i/2; j++) 
    //... 

プログラムセッション内でflagを初期化する必要があります。

Enter n? 
19 
Prime no.s till 19 are: 2 3 5 7 11 13 17 19 
関連する問題