-2

したがって、ポイントは、プログラムに 1 から入力した数値までのすべての素数を見つけてリストさせることです。素数をテストする数値として number_test を使用し、除数と除算する数値を使用しています。

ここに投稿されたプログラムと機能的に同じように見えるので、何が問題なのかわかりません: 1 から 100 までの素数 をいくつかのマイナーな変更を加えて印刷します (数値を入力し、「i」を入力した数値よりも小さい値に変更します)。

私は過去 3、4 日間探していましたが、授業に必要な程度まで、この質問に完全に答えるものを見つけられませんでした。どんな助けでも大歓迎です。

#include iostream
#include conio.h
using namespace std;

void main(void){
//Declare variables
int number_entered;
//Get inputs    
cout << "This program lists all prime numbers from 1 through a positive number entered."
 << endl;
cout << "Please enter a positive integer."
 << endl;
cin >> number_entered;
cout << "Displaying all numbers from 1 to " << number_entered
 << endl
 << "Press any key to continue..."
 << endl;
getch();

for(int number_test = 2; number_test < number_entered; number_test++){
    for(int divisor = 2; divisor < number_test; divisor++){
        if(number_test % divisor == 0){
            break;
        }
        else if(number_test % divisor != 0){
            cout << number_test << " ";
            break;
        }
    }
}

getch();
}
4

9 に答える 9

9

n未満の素数を計算するには、エラトステネスのふるいを使用する必要があります。まず、2 から目的の最大の素数nまでのすべての数のリストを作成します。次に、各反復ステップで、まだ考慮されていない残りの最小数が出力され、その倍数はすべてリストから削除されます。

function primes(n)
    sieve := makeArray(2..n, True)
    for p from 2 to n step 1
        if sieve(p)
            output p
            for i from p*p to n step p
                sieve[i] := False

この O(n log log n) アルゴリズムは非常に高速です。100 万未満の 78498 個の素数を 1 秒未満で計算できるはずです。

于 2013-10-18T16:55:51.320 に答える
2

「N」個の素数を見つける単純な C++ プログラム。

    #include  <iostream >
    using  namespace  std;

    int  main()
    {
        int  N;
        cin  >>  N;
        for (int  i =  2;  N > 0;  ++i)
        {
            bool  isPrime  =  true ;
            for (int  j =  2;  j < i;  ++j)
            {
                if (i  % j ==  0)
                {
                    isPrime  =  false ;
                    break ;
                }
            }
            if (isPrime)
            {
                --N;
                cout  <<  i  <<  "\n";
            }
        }
        return  0;
    }
于 2014-05-24T09:42:52.000 に答える
2

ちょっとした提案です。素数は奇数なので、偶数は省略できます。たとえば、以下のループでは、i と j は 1 (i ++) ではなく 2 (i +=2) 増加します。

for (int i=3;i<=numberByUser; i+=2){
    for (j=3;j<=i;j +=2){
        if (i%j==0){
            break;
        }
    }
于 2015-01-01T09:34:50.263 に答える
1

私はあなたの答えで、ループが終了すると思います(ループが素数かどうかをチェックするループについて話しています)、それが出てきたら、それが壊れたかどうかわかりません.だから作ってみてくださいフラグ変数と外側のチェック.I op は動作します

for(n=lower+1; n<upper; n++)
 {
    prime = 1;
     for(i=2; i<n; i++)
       if(n%i == 0)
         {
          prime = 0;
           break;
          }
       if(prime)
        printf("\n\n\t\t\t%d", n);
 }
于 2013-10-18T16:40:10.273 に答える
0

私のポイントがあなたのもののようだったとき、私はこのコードを書きました、それはうまくいきました. それがあなたを助けることを願っています。

#include <cstdio>
#include <vector>
using namespace std;

vector <int> sn;

bool isPrime(int n) {
        if (n <= 1) {
                return 0;
        }
        if (n == 2) {
                return true;
        }
        if (!(n % 2)) {
                return false;
        }
        for (int i = 2; i*i <= n; i++) {
                if (!(n % i)) {
                        return 0;
                }
        }
        return 1;
}

void primeNumbers(int k) {
        sn.push_back (2);
        int i = 3, j = 1;
        for ( ; j < k + 1; i += 2 && j++) {
                if (isPrime(i)) {
                        sn.push_back(i);
                }
        }
}

int main() {
        int i, k;
        scanf("%d", &k);
        primeNumbers(k);
        for (i = 0; i < sn.size(); i++) {
                printf("%d ", sn[i]);
        }
        return 0;
}
于 2013-10-18T16:53:02.263 に答える
0
int getNumberOfPrimes(int N) {
    bool *numbers = new bool[N-1]();

    for (int i = 2; i <= N/2; ++i) {
        if (numbers[i-2] == true) continue;

        for (int j = i+i; j <= N; j = j+i) {
            numbers[j-2] = true;
        }       
    }

    int count = 0;
    for (int i = 0; i < (N-1); ++i) {
        if (numbers[i] == false) ++count;
    }

    delete []numbers;
    return(count);
}
于 2015-04-26T01:03:48.067 に答える
0

男、私はこれの中で最も簡単な方法を持っていると思います. それがあなたのために働くことを願っています!

#include < iostream >

using namespace std;

int main()
{
  int n, i, j
  cin>>n;  //The max limith
  for(i=2; i<=2; i++)
   {
     for(j=1; j<=i/2; j++)
      if(i%j!=o)
      cout<<i;
   }

 return 0;
}
于 2018-02-27T15:22:15.790 に答える