1

3 から 100 までのすべての素数をリストするプログラムのコードがここにあります。私の主な問題は、プログラムが 3 つしか出力しないことです。なんらかの理由でループか何かを離れていると思います。数値が素数ではないことがわかったらすぐに内側の for ループを抜けて、それを出力できるように、for ステートメント内にブレークを入れます。しかし、それは機能していないようです。

#include <iostream>
#include <conio.h>
#include <cmath>

using namespace std;

int main()
{
    bool prime = true;

    for (int x = 3; x <= 100; x++)
    {
        for (int y = 2; y <= (x - 1); y++)
        {
            if ((x % y) == 0)
                prime = false;
            break;
        }

        if (prime == true)
            cout<<x<<endl;
   }

    getche();
    return 0;
}
4

11 に答える 11

6

The problem is:

for (int y = 2; y <= (x - 1); y++)
{
    if ((x % y) == 0)
        prime = false;
        break;
}

when it should be

for (int y = 2; y <= (x - 1); y++)
{
    if ((x % y) == 0)
    {
        prime = false;
        break;
    }
}

You break every time with prime set to true unless the first condition is met.

You also have to reset prime to true on each iteration:

for (int x = 3; x <= 100; x++)
{
    prime = true;
于 2012-10-12T22:12:07.300 に答える
2

素数をfalseに設定して、単一の数値が素数ではないことを示す場合、素数を再びtrueに設定することはありません。

于 2012-10-12T22:05:11.580 に答える
2

最初のforループ内の最初の行に、次のように記述します。

prime = true;

現在、primeフラグをにリセットすることはありませんtrue。したがって、4に到達してに設定primeすると、は常にfalsefalseであるため、後に素数が「検出」されることはありません。prime

完全なコード:

#include <iostream>
#include <conio.h>
#include <cmath>

using namespace std;

int main()
{
    bool prime = true;

    for (int x = 3; x <= 100; x++)
    {
        prime = true;
        for (int y = 2; y <= (x - 1); y++)
        {
            if ((x % y) == 0)
            {
                prime = false;
                break;
            }
        }

        if (prime == true)
            cout<<x<<endl;
    }

    getche();
    return 0;
}
于 2012-10-12T22:05:29.393 に答える
1

最初のループの後、prime=trueを初期化します。。プライムが偽になると、再び真になることはないからです。

for (int x = 3; x <= 100; x++)
{
     prime=true;
     ///rest of the code

}
于 2012-10-12T22:07:27.527 に答える
1

プライムを真にリセットすることはありません。カウトした後、prime=trueを実行する必要があります。

于 2012-10-12T22:07:48.007 に答える
0

これを試して。

for (int x = 3; x <= 100; x++)
{
     for (int y = 2; y <= (x - 1); y++)
     {
         if ((x % y) == 0)
         break;
         if((x-1)==y)
         cout<<x<<endl;
     }    
}
于 2012-10-12T22:09:26.877 に答える
0

効率については、この Java バージョンを試してください。ただし、C でも同じロジックを試すことができます。

    boolean prime;
    int iCount = 0;
    int jCount = 0;
    for(i = 2; i <= 100; i++)
    {
        iCount +=  1;

      prime = true;
      int squared = (int) (Math.sqrt(i));

      for(j = 2; j < squared; j++){
          jCount += 1;

        if(i%j == 0) prime = false;
      }
      if(prime) System.out.print(i+" ");
    }
于 2014-10-04T11:47:35.260 に答える
0

IF は括弧で囲まれていないため最初の行のみを実行するため、内側のループは常に break ステートメントを呼び出します。また、数値ごとに bool 変数をリセットする必要があります (つまり、最初のループ内)。

if ((x % y) == 0)
{
    prime = false;
    break; // previously it was always breaking
}

以前は、基本的に次のようにしていました。

if ((x % y) == 0)
{
    prime = false;
}
break; // WRONG!   
于 2012-10-12T22:13:27.020 に答える
0
int main()
{

  for (int x = 3; x <= 100; x++)
  {
    bool prime = true;
    for (int y = 2; y <= (x - 1); y++)
    {
      if ((x % y) == 0)
      {
          prime = false;
          break;
      }
    }

    if (prime == true)
    { 
      cout<<x<<endl;
    } 
  }

  getche();
  return 0;
}

ループ内でプライムを設定する必要があり、それを false に設定して、内側のループのテストで中断したいと考えました。

古い手のヒント番号 45623、コード ブロックが 1 行の場合は中かっこをスキップできますが、スキップしないでください。

于 2012-10-12T22:14:55.727 に答える
0

誰もがこれを言うように、2 つのエラーがあります。

1) の値を決してリセットしないので、 aを outer の先頭にprime追加します。 2) そうでなければ内部に変換することは一度だけ実行されます!!prime = truefor
if ((x % y) == 0) prime = false; break;if ((x % y) == 0) {prime = false; break;}

于 2012-10-12T22:23:10.313 に答える
0

以下は、3 から 100 までの素数を出力するためのコードです。素数を見つけるために、一般的なアルゴリズムではなくカウンター変数 n を使用しました。

#include <iostream.h>
#include <conio.h>

int main() {
    int i;
    int j;
    clrscr();
    int count=0;
    for(j=100; j>=3; j--) {
        for(int i=1; i<=j; i++) {
            if(j%i==0)
                count++;
        }
        if(count==2)
            cout<<"\n"<<j;
        count=0;
    }
    getch();
}                 
于 2012-10-29T14:51:59.227 に答える