मान लीजिए हमारे पास एक नंबर है। संख्याओं को इसके कारकों के उत्पाद के रूप में माना जा सकता है। तो, 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, ],]