この問題では、正の整数 N を取得します。私たちの仕事は、指定された数字が倹約的な数字であるかどうかをチェックするプログラムを作成することです。
FRUGAL NUMBER - 指定された数値の素因数分解の桁数より厳密に大きい数値。
例 - 625。数値 625 の素因数は 54 です。
625 の桁数は 3 です。
54 は 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
以上がC++ では、「Frugal Number」は「倹約数」と訳されます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。