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

C++で階乗を除算する数の最大累乗を求めます


2つの数nとfactがあるとします。事実を分割するnの最大の累乗を見つけなければなりません! (事実の階乗)。したがって、fact =5、n =2の場合、出力は3になります。つまり5! =120であり、これは2 ^ 3=8で割り切れます。

ここでは、ルジャンドルの公式を使用します。これは素数の最大の力を見つけ、それは事実を分割します!。 nのすべての素因数を見つけ、それから事実を分割するその最大の累乗を見つけます!。

したがって、ファクトが146で、n =15の場合、nの素因数は5と3です。したがって

3の場合、[146/3] + [48/3] + [16/3] + [5/3] + [1/3] =48 + 16 + 5 + 1 + 0=70になります。

5の場合、[146/5] + [29/5] + [5/5] + [1/3] =29 + 5 + 1 + 0=35になります。

#include<iostream>
#include<cmath>
using namespace std;
int getPowerPrime(int fact, int p) {
   int res = 0;
   while (fact > 0) {
      res += fact / p;
      fact /= p;
   }
   return res;
}
int findMinPower(int fact, int n) {
   int res = INT_MAX;
   for (int i = 2; i <= sqrt(n); i++) {
      int cnt = 0;
      if (n % i == 0) {
         cnt++;
         n = n / i;
      }
      if (cnt > 0) {
         int curr = getPowerPrime(fact, i) / cnt;
         res = min(res, curr);
      }
   }
   if (n >= 2) {
      int curr = getPowerPrime(fact, n);
      res = min(res, curr);
   }
   return res;
}
int main() {
   int fact = 146, n = 5;
   cout << "Minimum power: " << findMinPower(fact, n);
}

出力

Minimum power: 35

  1. 反復を使用して数値の階乗を見つけるC++プログラム

    非負の整数nの階乗は、n以下のすべての正の整数の積です。 例:6の階乗は720です。 6! = 6 * 5 * 4 * 3 * 2 *1 6! = 720 整数の階乗は、再帰プログラムまたは反復プログラムを使用して見つけることができます。 forループは、反復プログラムを使用して数値の階乗を見つけるために使用できます。これは次のように示されます。 例 #include <iostream> using namespace std; int main() {    int n = 6, fact = 1, i;    for(i=1; i

  2. 階乗を見つけるためのC++プログラム

    非負の整数nの階乗は、n以下のすべての正の整数の積です。 例:5の階乗は120です。 5! = 5 * 4 * 3 * 2 *1 5! = 120 整数の階乗は、再帰プログラムまたは非再帰プログラムを使用して見つけることができます。これらの両方の例を以下に示します。 非再帰プログラムを使用した階乗 forループを使用して、数値の階乗を見つけることができます。これは、次のプログラムを使用して示されます- 例 #include <iostream> using namespace std; int main() {    int n = 5, fact = 1