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

C++での質素な数


この問題では、正の整数Nが与えられます。私たちのタスクは、与えられた数が質素な数であるかどうかをチェックするプログラムを作成することです。

不正な番号 −指定された数の素因数分解の桁数よりも厳密に桁数が多い数。

− 625、数625の素因数は5 4 です。 。

625の桁数は3です。

5 4 の桁数 は2です。

3は厳密に2より大きくなります。したがって、625は質素な数です。

最初のいくつかの質素な数は − 125、128、243、256、343、512、625など。

問題を理解するために例を見てみましょう

Input: n = 128
Output: Frugal number
Explanation :
Factors of 128 are 2^7, number of digits 2.
The number of digits in 128 is 3.
The number is a frugal number.

ソリューションアプローチ

この問題の解決策の1つは、現在の数nが質素な数であるかどうかを確認することです。このために、nの素因数を見つけ、因数分解の桁数を数え、次に数の桁数を数えます。数値の桁数が因数の数値よりも大きい場合、その数値は質素な数値です。それ以外の場合はそうではありません。

ソリューションの動作を説明するプログラム

#include <bits/stdc++.h>
using namespace std;

vector<long int> calcPrimeNum(long int n){

   bool primeNos[n + 1];
   memset(primeNos, true, sizeof(primeNos));
   for (int i = 2; i * i <= n; i++) {
      if (primeNos[i] == true) {
         for (int j = i * 2; j <= n; j += i)
            primeNos[j] = false;
      }
   }
   vector<long int> allPrimeNumbers;
   for (int i = 2; i < n; i++)
      if (primeNos[i])
         allPrimeNumbers.push_back(i);
   return allPrimeNumbers;
}
int countNumDigits(long int n){

   long long int num = n;
   int digitCount = 0;
   while (num != 0) {
      num = num / 10;
      digitCount++;
   }
   return digitCount;
}
bool isFrugalNum(long int n){

   vector<long int> primeNum = calcPrimeNum(n);
   long int num = n;
   long int factorDigitCount = 0;
   for (int i = 0; i < primeNum.size(); i++) {
      if (num % primeNum[i] == 0) {
         long int k = 0;
         while (num % primeNum[i] == 0) {
            num = num / primeNum[i];
            k++;
         }
         if (k == 1)
            factorDigitCount = factorDigitCount + countNumDigits(primeNum[i]);
         else if (k != 1)
            factorDigitCount = factorDigitCount + countNumDigits(primeNum[i]) +                               countNumDigits(k);
      }
   }
   return (countNumDigits(n) > factorDigitCount && factorDigitCount != 0);
}
int main(){

   long int n = 625;
   cout<<"The number "<<n<<" is ";isFrugalNum(n)? cout<<"a Frugal number\n" : cout << "not a Frugal number\n";
   return 0;
}

出力

The number 625 is a Frugal number

  1. C++五胞体数

    五胞体数は、パスカルの三角形の5番目の数として表されます。ご存知のように、これは5番目の数字です。つまり、パスカルの三角形に少なくとも5つの数字が必要です。したがって、このシリーズの最初の数字は 1 4 6 4 1から始まります。 パスカルの三角形の4行目。したがって、このチュートリアルでは、たとえば、n番目の五胞体数を見つける必要があります Input : 1 Output : 1 Input : 4 Output : 35 次の図から出力を確認できます- この問題については、可能な限り、これは一種のシリーズであるため、ソリューションでこのシリーズのパターンを見つけようと

  2. C++でのAdamNumber

    このセクションでは、与えられた番号がアダム番号であるかどうかをチェックできるプログラムを作成する方法を説明します。コードに飛び込む前に、アダムの番号を見てみましょう。 アダム数はnと言う数であり、nの二乗とnの逆の二乗が互いに逆である場合、その数はアダム数です。例として、13という数を考えてみましょう。逆は31です。13の平方は169で、31の平方は961です。169と961は互いに逆なので、13はアダム数です。 指定された番号がアダム番号ではないかどうかを確認する手順- 番号nを取る 数値を逆にしてmに格納します nの正方形を取得し、sq_nに保存します mの正方形を取得し、sq