কম্পিউটার

C++ এ সমমানের সংখ্যা


ইকুইডিজিটাল সংখ্যা হল গাণিতিকভাবে বিশেষ সংখ্যা যেখানে সংখ্যার সংখ্যার সংখ্যা তার মৌলিক ফ্যাক্টরাইজেশনের সংখ্যার সমান।

এই সমস্যায়, আমরা একটি পূর্ণসংখ্যা মান n দেওয়া হয়. আমাদের কাজ হল n পর্যন্ত সমস্ত সমান ডিজিটাল সংখ্যার জন্য একটি প্রোগ্রাম তৈরি করা।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট: n =12

আউটপুট:1 2 3 5 7 10 11

সমাধান পদ্ধতি:

সমস্যার একটি সহজ সমাধান হল সংখ্যার গুণনীয়কগুলি খুঁজে বের করা এবং সংখ্যার সংখ্যার সংখ্যার সংখ্যার সমান কিনা তা পরীক্ষা করা।

sieves পদ্ধতি ব্যবহার করে প্রধান কারণ খুঁজে পাওয়া যেতে পারে।

অ্যালগরিদম:

ধাপ 1: সমস্ত মৌলিক সংখ্যা খুঁজুন।
ধাপ 2: n সংখ্যার সংখ্যা সংখ্যা গণনা করুন।

ধাপ 3: সংখ্যার সমস্ত মৌলিক গুণনীয়ক খুঁজুন এবং এতে সংখ্যার সংখ্যা গণনা করুন।

পদক্ষেপ 4: উভয় মান তুলনা.
ধাপ 5: সত্য হলে নম্বরটি ফেরত দিন।

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

উদাহরণ

#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++ এ মিতব্যয়ী নম্বর

  2. C++ পেন্টাটোপ নম্বর

  3. সি++ এ ডুডেনি নম্বর

  4. একটি সংখ্যা C++ এ একটি রহস্য সংখ্যা কিনা তা পরীক্ষা করুন