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

C++で1からNまでの概素数の数を見つける


数Nがあるとします。1からNの範囲でほぼ素数を見つける必要があります。正確に2つの異なる因子がある場合、その数は概素数と呼ばれます。数には任意の数の非素因数を含めることができますが、2つの素因数である必要があります。したがって、Nが2の場合、出力は2になります。6と10の2つの数値があります。

ここでは、エラトステネスのふるいアプローチを使用します。より良いアイデアを得るために、次の実装を確認してください。

#include<iostream>
#define N 100005
using namespace std;
bool prime[N];
void SieveOfEratosthenes() {
   for(int i = 0; i<N; i++)
   prime[i] = true;
   prime[1] = false;
   for (int i = 2; i * i < N; i++) {
      if (prime[i] == true) {
         for (int j = i * 2; j < N; j += i)
            prime[j] = false;
      }
   }
}
int countAlmostPrime(int n) {
   int result = 0;
   for (int i = 6; i <= n; i++) {
      int div_count = 0;
      for (int j = 2; j * j <= i; j++) {
         if (i % j == 0) {
            if (j * j == i) {
               if (prime[j])
                  div_count++;
            }else {
               if (prime[j])
                  div_count++;
               if (prime[i / j])
                  div_count++;
            }
         }
      }
      if (div_count == 2)
         result++;
   }
   return result;
}
int main() {
   SieveOfEratosthenes();
   int n = 21;
   cout << "Number of almost primes in range 1 to "<<n << " is: " << countAlmostPrime(n);
}

出力

Number of almost primes in range 1 to 21 is: 8

  1. C++の配列内のすべての素数の積

    いくつかの要素を持つ整数配列arr[]が与えられた場合、タスクはその数のすべての素数の積を見つけることです。 素数は、1で割った数、またはその数自体です。または、素数は、1とその数自体を除いて他の数で割り切れない数です。 1、2、3、5、7、11など 与えられた配列の解を見つける必要があります- 入力 −arr [] ={11、20、31、4、5、6、70} 出力 − 1705 説明 −配列の素数は− 11、31、5であり、それらの積は1705 入力 − arr [] ={1、2、3、4、5、6、7} 出力 − 210 説明 −配列の素数は− 1、2、3、5、7

  2. C++のソートされていない配列でk個の最も近い数を検索します

    要素が少ない配列Aがあるとします。配列はソートされていません。他に2つの値Xとkがあります。私たちのタスクは、配列AからXの最も近い要素のk個を見つけることです。要素Xが配列に存在する場合、それは出力に表示されません。 A =[48、50、55、30、39、35、42、45、12、16、53、22、56]およびX =35、k =4の場合、出力は30、39、42、45になります。 。 これを解決するために、ヒープデータ構造を使用します。手順は次のようになります- 最初のk個の要素との差の最大ヒープを1つ作成します k + 1番目の要素から始まるすべての要素について、これらの手順を繰