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

C++で最大Nまでのログを計算するために必要なログ値の最小数を見つけます


log(x * y)=log(x)+ log(y)であることがわかっています。したがって、1からNまでのすべてのログ値を計算するために必要なログ値の最小数を確認します。したがって、Nが6の場合、log(1)からlog(6)のように、出力は3になります。 log(1)を除いて、3つのログ値が必要です。 log(1)は常に0であるため、無視します。ここで、log(2)とlog(3)について、を見つける必要があります。その後、log(4)の場合はlog(2)+ log(2)になりますが、log(2)の値がわかっているため、これを再度計算することはありません。log(5)の場合は計算する必要があります。つまり、カウントは3、log(6)=log(3)+ log(2)であり、すでにわかっているので、カウントは3です。

この問題は、1からNの範囲の素数を見つけるために減らすことができます。素数の場合、ログ値を個別に計算する必要があることがわかります。それ以外の場合は、因数分解して計算する必要があります。

#include<iostream>
#include<vector>
#define MAX 1000005
using namespace std;
vector<int> prime(MAX, 1);
void seive(int N) {
   prime[0] = prime[1] = 0;
   for (int i = 2; i <= N; i++) {
      if (prime[i] == 1) {
         for (int j = 2; i * j <= N; j++)
         prime[i * j] = 0;
      }
   }
}
int numberOfLogs(int N) {
   int log_count = 0;
   seive(N);
   for (int i = 1; i <= N; i++) {
      if (prime[i] == 1)
      log_count++;
   }
   return log_count;
}
int main() {
   int N = 8;
   cout<<"Minimum number of log counts required: " << numberOfLogs(N)<<endl;
}

出力

Minimum number of log counts required: 4

  1. C ++を使用して、数の因数の最小合計を求めます。

    ここでは、与えられた数の因子の最小合計を取得する方法を見ていきます。数が12であると仮定します。これはさまざまな方法で因数分解できます- 12 =12 * 1(12 + 1 =13) 12 =2 * 6(2 + 6 =8) 12 =3 * 4(3 + 4 =7) 12 =2 * 2 * 3(2 + 2 + 3 =7) 最小の合計は7です。数値を取り、最小の因子の合計を見つけようとします。最小の因数分解の合計を取得するには、可能な限り数を因数分解する必要があります。言い換えれば、素因数を足して合計Sを求めようとすると、その合計は最小化されると言えます。 例 #include<

  2. 代数式の最小値を見つけるためのC++プログラム

    これは、任意の代数式の最小値を見つけるためのC ++プログラムです。(x1 + x2 + x3+。。。+xa)*(y1 + y2+。。。+yb)および(a + b )整数が与えられます。数値と残りのb数値のすべての可能な組み合わせを検討し、それらの値を計算して、そこから最小値を導き出すことができます。 アルゴリズム Begin    function MaxValue() :    Arguments:    a[] = array which store the elements.    x,y = intege