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.

해결 방법

문제에 대한 한 가지 해결책은 현재 숫자 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