Dalam masalah ini, kita mendapat integer positif N. Tugas kami adalah untuk mencipta program yang menyemak sama ada nombor yang diberikan adalah nombor yang jimat.
NOMBOR JIMAT - Nombor yang digitnya lebih besar daripada bilangan digit dalam pemfaktoran perdana bagi nombor yang diberikan.
Contoh - 625, faktor perdana bagi nombor 625 ialah 54.
Bilangan digit dalam 625 ialah 3.
54 ialah 2.
3 adalah lebih besar daripada 2. Oleh itu, 625 adalah nombor yang menjimatkan. . adalah untuk menyemak sama ada nombor semasa n ialah nombor parsimoni. Untuk melakukan ini, kita akan mencari faktor perdana n dan mengira bilangan digit dalam pemfaktoran, kemudian mengira bilangan digit dalam nombor itu. Jika bilangan digit dalam nombor lebih besar daripada bilangan digit dalam faktor, maka nombor itu adalah nombor parsimoni, jika tidak, ia tidak.
ContohProgram yang menggambarkan cara penyelesaian kami berfungsi
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.
Output Atas ialah kandungan terperinci Dalam C++, terjemahan 'Nombor Jimat' ialah 'nombor jimat'. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!#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;
}