मान लीजिए हमारे पास एक संख्या N है। हमारे पास एक और संख्या k है। हमें यह जांचना है कि k संख्याओं का उपयोग करके संख्या का प्रतिनिधित्व किया जा सकता है या नहीं। मान लीजिए एक संख्या 54, और k =3, तो यह [2, 3, 9] जैसी संख्याओं को प्रिंट करेगा, यदि इसे प्रदर्शित नहीं किया जा सकता है, तो इसे प्रिंट करें।
इसे हल करने के लिए, हम N के सभी अभाज्य गुणनखंडों को खोजेंगे, और उन्हें एक सदिश में संग्रहित करेंगे, फिर 1 से बड़ी k संख्याएँ ज्ञात करने के लिए, हम जाँचते हैं कि सदिश का आकार k से बड़ा है या नहीं। यदि आकार k से कम है, तो -1 लौटाएं, अन्यथा पहले k-1 फ़ैक्टर प्रिंट करें और अंतिम फ़ैक्टर शेष सभी संख्याओं का गुणनफल होगा।
उदाहरण
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int getKFactors(int n, int k){
int i;
vector<int> vec;
while(n % 2 == 0){
vec.push_back(2);
n = n/2; //reduce n by dividing this by 2
}
for(i = 3; i <= sqrt(n); i=i+2){ //i will increase by 2, to get only odd numbers
while(n % i == 0){
n = n/i;
vec.push_back(i);
}
}
if(n > 2){
vec.push_back(n);
}
if(vec.size() < k){
cout << "Cannot be represented";
return -1;
}
for (int i=0; i<k-1; i++)
cout << vec[i] << ", ";
int prod = 1;
for (int i=k-1; i<vec.size(); i++)
prod = prod*vec[i];
cout << prod << endl;
}
int main() {
int n = 54, k = 3;
getKFactors(n, k);
} आउटपुट
2, 3, 9