अवधारणा
किसी दिए गए पूर्णांक N के संबंध में, हमारा कार्य N के सभी गुणनखंडों को N के चार गुणकों के गुणनफल को प्रिंट करना है ताकि -
- चार कारकों का योग N के बराबर होता है।
- चार कारकों का गुणनफल सबसे बड़ा है।
यह देखा गया है कि यदि ऐसे 4 कारकों को खोजना असंभव है तो "संभव नहीं" प्रिंट करें।
यह ध्यान दिया जाना चाहिए कि उत्पाद को अधिकतम करने के लिए सभी चार कारक एक दूसरे के बराबर हो सकते हैं।
इनपुट
24
आउटपुट
All the factors are -> 1 2 4 5 8 10 16 20 40 80 Product is -> 160000
गुणनखंड 20 को चार बार चुनें,
इसलिए, 20+20+20+20 =24 और उत्पाद अधिकतम है।
विधि
इस समस्या को हल करने के लिए चरण-दर-चरण एल्गोरिथम निम्नलिखित है -
- सबसे पहले किसी संख्या 'N' के गुणनखंडों को 1 से 'N' के वर्गमूल पर जाकर निर्धारित करें और सत्यापित करें कि क्या 'i' और 'n/i' N को विभाजित करते हैं और उन्हें एक वेक्टर में संग्रहीत करते हैं।
- अब हम वेक्टर को सॉर्ट करते हैं और प्रत्येक तत्व को प्रिंट करते हैं।
- तीन छोरों को लागू करते हुए, चौथे नंबर के साथ उत्पाद को अधिकतम करने के लिए तीन नंबर निर्धारित करें।
- आखिरकार हम अगले अधिकतम उत्पाद को पिछले उत्पाद से बदल देते हैं।
- जब आपको चार कारक मिलेंगे, तो उत्पाद को प्रिंट करें।
उदाहरण
// C++ program to find four factors of N // with maximum product and sum equal to N #include <bits/stdc++.h> using namespace std; // Shows function to find factors // and to print those four factors void findfactors2(int n1){ vector<int> vec2; // Now inserting all the factors in a vector s for (int i = 1; i * i <= n1; i++) { if (n1 % i == 0) { vec2.push_back(i); vec2.push_back(n1 / i); } } // Used to sort the vector sort(vec2.begin(), vec2.end()); // Used to print all the factors cout << "All the factors are -> "; for (int i = 0; i < vec2.size(); i++) cout << vec2[i] << " "; cout << endl; // Now any elements is divisible by 1 int maxProduct2 = 1; bool flag2 = 1; // implementing three loop we'll find // the three maximum factors for (int i = 0; i < vec2.size(); i++) { for (int j = i; j < vec2.size(); j++) { for (int k = j; k < vec2.size(); k++) { // Now storing the fourth factor in y int y = n1 - vec2[i] - vec2[j] - vec2[k]; // It has been seen that if the fouth factor become negative // then break if (y <= 0) break; // Now we will replace more optimum number // than the previous one if (n1 % y == 0) { flag2 = 0; maxProduct2 = max(vec2[i] * vec2[j] * vec2[k] *y,maxProduct2); } } } } // Used to print the product if the numbers exist if (flag2 == 0) cout << "Product is -> " << maxProduct2 << endl; else cout << "Not possible" << endl; } // Driver code int main(){ int n1; n1 = 80; findfactors2(n1); return 0; }
आउटपुट
All the factors are -> 1 2 4 5 8 10 16 20 40 80 Product is -> 160000