मान लीजिए हमारे पास एक नंबर है। संख्याओं को इसके कारकों के उत्पाद के रूप में माना जा सकता है। तो, 8 =2 x 2 x 2; =2 x 4. हमें एक ऐसा फलन बनाना है जो एक पूर्णांक n लेता है और उसके गुणनखंडों के सभी संभावित संयोजनों को लौटाता है।
इसलिए, यदि इनपुट 12 जैसा है, तो आउटपुट [[2, 6], [2, 2, 3], [3, 4]]
होगा।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक फ़ंक्शन हल करें () को परिभाषित करें, इसमें n, लक्ष्य, प्रारंभ,
. लगेगा -
रिट नामक सूचियों की एक सूची को परिभाषित करें
-
यदि n 1 के समान है, तो -
-
वापसी रिट
-
-
यदि n लक्ष्य के बराबर नहीं है, तो -
-
रिट के अंत में n डालें
-
-
प्रारंभ करने के लिए i :=start, जब i * i <=n, अद्यतन करें (i से 1 बढ़ाएँ), करें -
-
अगर n mod i 0 के समान है, तो -
-
अन्य =हल करें (n / i, लक्ष्य, i)
-
इनिशियलाइज़ j :=0 के लिए, जब j <दूसरे का आकार, अपडेट करें (1 से j बढ़ाएँ), करें -
-
अन्य के अंत में i डालें[j]
-
रिट के अंत में अन्य [j] डालें
-
-
-
-
वापसी रिट
-
मुख्य विधि से निम्न कार्य करें -
-
वापसी हल (एन, एन, 2)
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<auto< > v){
cout << "[";
for(int i = 0; i<v.size(); i++){
cout << "[";
for(int j = 0; j <v[i].size(); j++){
cout << v[i][j] << ", ";
}
cout << "],";
}
cout << "]"<<endl;
}
class Solution {
public:
vector < vector <int< > solve(int n, int target, int start){
vector < vector <int< > ret;
if(n == 1){
return ret;
}
if(n != target){
ret.push_back({n});
}
for(int i = start; i * i <= n; i++){
if(n % i == 0){
vector < vector <int< > other = solve(n / i, target,i);
for(int j = 0; j < other.size(); j++){
other[j].push_back(i);
ret.push_back(other[j]);
}
}
}
return ret;
}
vector<vector<int<> getFactors(int n) {
return solve(n, n, 2);
}
};
main(){
Solution ob;
print_vector(ob.getFactors(16));
} इनपुट
16
आउटपुट
[[8, 2, ],[4, 2, 2, ],[2, 2, 2, 2, ],[4, 4, ],]