কম্পিউটার

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.

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

বর্তমান সংখ্যা 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++ পেন্টাটোপ নম্বর

  2. C++ এ কুৎসিত সংখ্যা II

  3. C++ এ ছিটমহলের সংখ্যা

  4. C++ এ অ্যাডাম নম্বর