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

C++での等デジタル数


等デジタル数は数学的に特殊な数であり、数の桁数は素因数分解の数と同じです。

この問題では、整数値nが与えられます。私たちの仕事は、nまでのすべての等デジタル数に対するプログラムを作成することです。

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

入力: n =12

出力:1 2 3 5 7 10 11

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

この問題の簡単な解決策は、数の因数を見つけて、素数の数が数の桁数と等しいかどうかを確認することです。

主な要因は、ふるい法を使用して見つけることができます。

アルゴリズム:

ステップ1: すべての素数を見つけます。
ステップ2: 数nの桁数を数えます。

ステップ3: 数のすべての素因数を見つけて、その中の桁数を数えます。

ステップ4: 両方の値を比較します。
ステップ5: trueの場合は数値を返します。

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

#include<bits/stdc++.h>
using namespace std;
const int MAX = 10000;

vector <int> primes;

void findAllPrimes()
{
   bool marked[MAX/2 + 1] = {0};
   for (int i=1; i*i<= (MAX -1)/2; i++)
      for (int j=(i*(i+1))<<1; j<=MAX/2; j=j+2*i+1)
         marked[j] = true;
   primes.push_back(2);
   for (int i=1; i<=MAX/2; i++)
      if (marked[i] == false)
         primes.push_back(2*i + 1);
}

bool isEquidigital(int n) {
   
   if (n == 1)
      return true;
   int number = n;
   int digitSum = 0;
   while (number > 0)
   {
      digitSum++;
      number = number/10;
   }
   int primeDigits = 0 , expCount = 0, p;
   for (int i = 0; primes[i] <= n/2; i++) {
      while (n % primes[i] == 0) {
         p = primes[i];
         n = n/p;
         expCount++;
      }
      while (p > 0) {
         primeDigits++;
         p = p / 10;
      }
      while (expCount > 1) {
         primeDigits++;
         expCount = expCount / 10;
      }
   }
   if (n != 1)
   {
      while (n > 0)
      {
         primeDigits++;
         n = n/10;
      }
   }

   return (primeDigits == digitSum);
}

int main() {

   findAllPrimes();
   int n = 11;
   cout << "Printing Equidigital Numbers less than "<<n<<" : ";
   for (int i=1; i<n; i++)
      if (isEquidigital(i))
         cout<<i<<"\t";
   return 0;
}

出力-

Printing Equidigital Numbers less than 11 : 1 2 3 5 7 10 11

  1. C++五胞体数

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

  2. C++でのデュードニー番号

    与えられた数の底の数理論で定義された数は、最初の自然数の桁の合計が2番目の数の桁の合計に等しくなるように、別の自然数の完全な3乗に等しい自然数です。 (ウィキペディア)。 番号はヘンリー・デュードニーによって発見されました 。その数式 は- ここでは、整数nが与えられます。私たちの仕事は、与えられた番号nが人物番号であるかどうかを確認することです。 問題を理解するために例を見てみましょう 入力: N =17592 出力: いいえ 説明: 与えられた番号はダドニー番号ではありません。 ソリューションアプローチ- 解決策は、デュードニー番号の基本的な定義にあります。