2017-03-23 5 views
-2

助けてください! Cのこの素数プログラムがなぜ機能していないのですか?なぜこの素数のCプログラムが間違っていますか?

#include<stdio.h> 
#include<conio.h> 
int main() 
{ 
    int n,i; 
    printf("enter the number"); 
    scanf("%d",&n); 
    for(i=2;i<=n-1;i++) 
    { 
     if(n%i==0) 
     printf("%d is not a prime number",n); 
     else 
     printf("%d is a prime number",n); 

    } 

    getch(); 
} 

なぜこのプログラムは動作しませんか?

+4

_Whyこのプログラムが動作していません..._正確には動作しません。 –

+2

ヒント:すべての可能な除数をテストした後に、数値がプライムであるかどうかを決定する必要があります。また、@flaviodesousaが指摘するように、n-1までの除数をテストすることは役に立たない。 – fvu

+2

実際に除数> sqrt(n)は役に立ちません – flaviodesousa

答えて

2

フラグを使用して、数値が割り切れるかどうかを確認します。

#include<stdio.h> 
#include<conio.h> 
int main() 

{ 
    int n,i,flag=0; 
    printf("enter the number"); 
    scanf("%d",&n); 
    for(i=2;i<=n-1;i++) 
    { 
     if(n%i==0) 
     { 
      flag = 1; 
      break; 
     } 
    } 

    if (flag == 1) 
    { 
     printf("%d is not a prime number",n); 
    } 
    else 
    { 
    printf("%d is a prime number",n); 
    } 

    getch(); 
} 

また、forループ:for(i=2;i<=n-1;i++)が必要以上に繰り返します。 i <= sqrt(n)に設定する必要があります。

+1

'i <= sqrt(n)'または完全な正方形を素数にします。 –

+4

私は 'i * i <= n'を使って' sqrt() '関数の使用を避けます – JeremyP

+0

私の答えを編集しました。 – learner

関連する問題