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

最小素因数がNC++である10^6未満のすべての数を数えます


素数、たとえばnumが与えられ、タスクは、最小素因数がnumに等しい10^6未満のすべての数のカウントを計算することです。

Input − num = 7
Output − Number of prime factors = 38095

Input − num = 3
Output − Number of prime factors = 16666

以下のプログラムで使用されているアプローチは次のとおりです

  • 数字を入力します。たとえば、num

  • iから2までルー​​プを開始し、iは最大値以下である必要があり、iの値をインクリメントします

  • ループ内で、s_prime [i] =0

    かどうかを確認します
  • ループを作成し、jをi * 2に設定し、jをmax以下に設定し、jをj+iに設定します

  • ここで、s_prime [j] =1

    かどうかを確認します
  • s_prime [j] =1

    に設定します
  • s_count[i]を1ずつ増やします

  • 結果を印刷する

#include <bits/stdc++.h>
using namespace std;
#define MAX 1000000
// a sieve for prime number and
// to count the number of prime
int s_prime[MAX + 4] = { 0 }, s_count[MAX + 4] = { 0 };
void create_sieve(){
   // As 1 is not a prime number
   s_prime[1] = 1;
   // creating the sieve
   for (int i = 2; i <= MAX; i++){
      // if i is a prime number
      if (s_prime[i] == 0){
         for (int j = i * 2; j <= MAX; j += i){
            // if i is the least prime factor
            if (s_prime[j] == 0){
               // The number j is not a prime
               s_prime[j] = 1;
               // counting the numbers whose least prime factor
               // is i
               s_count[i]++;
            }
         }
      }
   }
}
int main(){
   // create the sieve
   create_sieve();
   int N = 7;
   cout << "Number of prime factors = " << (s_count[N] + 1) << endl;
   N = 3;
   cout << "Number of prime factors = " << (s_count[N] + 1) << endl;
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Number of prime factors = 38095
Number of prime factors = 166667

  1. C++でのY未満の数のセットの最小数

    問題の説明 連続する数字の文字列と数字のYが与えられた場合、タスクは、すべてのセットが以下のルールに従うように最小セットの数を見つけることです- セットには連続した数字が含まれている必要があります 数字を複数回使用することはできません。 セット内の数はYを超えてはなりません。 例 str =“ 1234”およびY =20の場合、以下のセットが作成されるため、答えは3です- {12}{3}および{4} アルゴリズム 文字列を数値に変換 数値がY以下の場合は、f=1とマークします 数値がYを超える場合は、f =1の場合はカウントを増やし、fを0として再初期化し、numをs [i]-‘0

  2. C++でn以下のすべての階乗数を検索します

    ここでは、n以下のすべての階乗数を出力する方法を説明します。数値Nは、正の数の階乗である場合、階乗数と呼ばれます。したがって、いくつかの階乗数は1、2、6、24、120です。 階乗数を印刷するために、階乗を直接見つける必要はありません。 i =1から始めて、階乗*iを出力します。最初は階乗は1です。理解を深めるためにコードを見てみましょう。 例 #include <iostream> using namespace std; void getFactorialNumbers(int n) {    int fact = 1;    int