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

C++STLを使用して特定の範囲の素数を印刷するプログラム


このチュートリアルでは、C++標準テンプレートライブラリを使用して特定の範囲の数値の素数を出力するプログラムについて説明します。

ここでは、aとbという2つの数字が与えられます。タスクは、この範囲内のすべての次の素数を出力することです。このために、Sieve of Eratosthenesメソッドをサブルーチンとして実行することにより、これを使用します。同時に、すべての素数をベクトルに格納し、最後にすべてを印刷します。

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long int unll;
vector<unll> eratosthemes(unll n){
   vector<bool> prime_num(n+1,true);
   prime_num[0] = false;
   prime_num[1] = false;
   int m = sqrt(n);
   for (unll p=2; p<=m; p++){
      if (prime_num[p]){
         for (unll i=p*2; i<=n; i += p)
            prime_num[i] = false;
      }
   }
   vector<unll< elements;
   for (int i=0;i<n;i++)
   if (prime_num[i])
      elements.push_back(i);
   return elements;
}
bool check_zero(unll i){
   return i == 0;
}
vector<unll> sieve_range(unll start,unll end){
   vector<unll> s1 = eratosthemes(start);
   vector<unll> s2 = eratosthemes(end);
   vector<unll> elements(end-start);
   set_difference(s2.begin(), s2.end(), s1.begin(),
   s2.end(), elements.begin());
   vector<unll>::iterator itr =
   remove_if(elements.begin(),elements.end(),check_zero);
   elements.resize(itr-elements.begin());
   return elements;
}
int main(void){
   unll start = 10;
   unll end = 90;
   vector<unll> elements = sieve_range(start,end);
   for (auto i:elements)
   cout<<i<<' ';
   return 0;
}

出力

11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89

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

    Wheel Sieveメソッドは、特定の範囲の間の素数を見つけるために使用されます。ホイール因数分解は、エラトステネスのふるいの予備を手動で実行するためのグラフィカルな方法であり、素数をコンポジットから分離します。 この方法では、最も内側の円の素数は、他の円のそれ自体と同様の位置にそれらの倍数を持ち、素数とその倍数のスポークを形成します。最も内側の円のこれらの素数の倍数は、外側の円の合成数のスポークを形成します。 アルゴリズム Begin    Define max number    gen_sieve_primes()    D

  2. 関数を使用して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;