在這個問題中,我們得到一個正整數 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.
該問題的解決方案之一是檢查當前數字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中文網其他相關文章!