C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

与えられた範囲の間で素数を生成するためにホイールシーブを実装するC++プログラム


Wheel Sieveメソッドは、特定の範囲の間の素数を見つけるために使用されます。ホイール因数分解は、エラトステネスのふるいの予備を手動で実行するためのグラフィカルな方法であり、素数をコンポジットから分離します。

この方法では、最も内側の円の素数は、他の円のそれ自体と同様の位置にそれらの倍数を持ち、素数とその倍数のスポークを形成します。最も内側の円のこれらの素数の倍数は、外側の円の合成数のスポークを形成します。

アルゴリズム

Begin
   Define max number
   gen_sieve_primes()
   Declare c
   Assign c = 2
   For p = 2 to max number
      If prime[p]==0
         prime[p]=1
         Mul = p multiply c
      For Mul less than max number
         prime[Mul] = -1
         Increment c
         Mul = p multiply c
      Done
   Done
   Print_all_prime()
   Assign c=0
   For i = 0 to max number
      if (prime[i] == 1)
         Increment c
   If c less than 4
      Switch(c)
         Case 1
            Print 1st prime number
         Case 2
            Print 2nd prime number
         Case 3
            Print 3rd prime number
   Else
      Print nth prime number
End

サンプルコード

#include <iostream>
using namespace std;
#define MAX_NUMBER 40
int prime[MAX_NUMBER];
void gen_sieve_prime(void) {
   for (int p = 2; p < MAX_NUMBER; p++) {
      if (prime[p] == 0)
         prime[p] = 1;
         int c = 2;
         int mul = p * c;
      for (; mul < MAX_NUMBER;) {
         prime[mul] = -1;
         c++;
         mul = p * c;
      }
   }
}
void print_all_prime() {
   int c = 0;
   for (int i = 0; i < MAX_NUMBER; i++) {
      if (prime[i] == 1) {
         c++;
         if (c < 4) {
            switch (c) {
               case 1:
                  cout << c << "st prime is: " << i << endl;
                  break;
               case 2:
                  cout << c << "nd prime is: " << i << endl;
                  break;
               case 3:
                  cout << c << "rd prime is: " << i << endl;
                  break;
              default:
              break;
           }
        }else
         cout << c << "th prime is: " << i << endl;
      }
   }
}
int main() {
   gen_sieve_prime();
   print_all_prime();
   return 0;
}

出力

1st prime is: 2
2nd prime is: 3
3rd prime is: 5
4th prime is: 7
5th prime is: 11
6th prime is: 13
7th prime is: 17
8th prime is: 19
9th prime is: 23
10th prime is: 29
11th prime is: 31
12th prime is: 37

  1. 関数を使用して2つの区間の間の素数を表示するC++プログラム

    素数は1より大きい整数であり、素数の唯一の要素は1とそれ自体でなければなりません。最初の素数のいくつかは2、3、5、7、11、13、17などです。 2つの区間の間に多くの素数が存在する可能性があります。たとえば、区間5と20の間の素数は、5、7、11、13、17、19です。 2つの区間の間で素数を見つけて表示するプログラムは次のとおりです。 例 #include <iostream> using namespace std; void primeNumbers (int lbound, int ubound) {    int flag, i;  

  2. 2つの区間の素数を表示するC++プログラム

    素数は1より大きい整数であり、素数の唯一の要素は1とそれ自体でなければなりません。最初の素数のいくつかは2、3、5、7、11、13、17などです。 2つの区間の間に多くの素数が存在する可能性があります。たとえば、区間5と20の間の素数は-です。 5, 7, 11, 13, 17 and 19. 2つの区間の間で素数を見つけて表示するプログラムは次のとおりです。 例 #include <iostream> using namespace std; void PrimeNumbers (int lbound, int ubound) {    int flag,