2016-09-19 7 views
-4

私は素数のためのプログラムを持っていますが、私はそれを最適化する必要があります。何かヒント?コーディングによる最適化

int num, i, count = 0; 

    printf("Type a non-negative integer:\n"); 

scanf("%d", &num); 

    if((num%2 == 0)&& (num != 2)||(num == 1)){ 

    printf("%d is not a prime number.\n", num); 

    } else if(num == 2){ 

    printf("%d is a prime number.\n", num); 

    } else { 

    for(i = 3; i < num; i += 2){ 

     if(num%i == 0){ 

    count++; 

    break; 

     } 

    } 

    if(count == 0){ 

     printf("%d is a prime number.\n", num); 

    } else { 

     printf("%d is not a prime number.\n", num); 

    } 

    } 

} 
+4

これは[codereview.se]でよりよく質問されるかもしれません。スタックオーバーフローは、動作していないコードに特化しています。 (ここで登録したとき以外は、ツアー(http://codereview.stackexchange.com/tour)を読むことを強くお勧めします) – usr2564301

+0

海の素数を「プライム検索」していますか?うわー、howquichly時間が行く... – Olaf

+0

これは*プログラム*ではありません。完全な例を投稿し、スペースでコードをインデントする方法を学んでください。 – chqrlie

答えて

2

numの平方根まで調べる必要があります。いくつかのヒントについては、testing primesを参照してください。

0

私はこれがあなた自身で解決できるかもしれない基本的な問題の1つだと思います! この問題を解決するお手伝いをいたします。まずは素数定義を見て始めましょう:

素数は1とそれ自身で割り切れる数値です。 N次にNは1で割り切れると仮定し、Nとし、数字1は素数ではないとします。

だから、アイデアは次のとおりです。

1 - 数が1の場合はプライムではありません!

2 - 数が2の場合プライム

3 - 他---->我々は、私N%の値の計算を開始、I = 2初期化します。それが0であれば数は、そうでない場合は、我々は我々がするまで、ステップ3を実行します。1.

で私をインクリメントする必要があり、プライムではない私< N(またはI < = SQRT(N))

の場合数字はiで割り切れないので、それは素数です!ここで

は、単純な実装です:

int n ; 
printf("enter n:"); 
scanf("%d",&n); 
if(n<=1) printf("is not prime"); 
else if(n==2) printf("is prime"); 
else{ 
    bool flag = true; 
    for(int i = 2 ; i < n ; i++) 
     if(n%i==0){ 
     flag = false; 
     break; 
     } 
    if(flag) printf("is prime"); 
    else printf("is not prime"); 
} 

素数のシリーズを見つけるために、より良いアルゴリズムがあります。私はそれを学ぶために、より良いことだと思う:

Sieve of Eratosthenes

私はこのチュートリアルでは、素数が何であるかを見つけるのに役立ちます願っています。

+0

質問は[tag:c]であり、[tag:C++]ではありません。あなたはまっすぐなCコードとして回答を難なく再作成することができます。 Cの質問に対するC++の答えを提供することは良い考えではありません。 –

+0

@JonathanLefflerおっと!昨夜は疲れていて、私はそれを見たC++ :)) 私はあなたの編集とアドバイスのおかげで、 –